oracle数据库同步到另一个数据库(oracle数据库导入dmp)
老铁们,大家好,相信还有很多朋友对于oracle数据库同步到另一个数据库和oracle数据库导入dmp的相关问题不太懂,没关系,今天就由我来为大家分享分享oracle数据库同步到另一个数据库以及oracle数据库导入dmp的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
如何实现oracle两个数据库之间的同步
为方便完成指定数据表的同步操作,可以采用dblink与merge结合的方法完成。
操作环境:此数据库服务器ip为192.168.196.76,有center与branch两个库,一般需要将center的表数据同步到branch,center为源库,branch为目标库,具体步骤如下:
1.在源库创建到目标库的dblink
create database link branch--输入所要创建dblink的名称,自定义
connect to dbuser identified by“password”--设置连接远程数据库的用户名和密码
using'192.168.196.76/branch';--指定目标数据库的连接方式,可用tns名称
在创建dblink时,要注意,有时候可能会报用户名和密码错误,但实际上我们所输入的账户信息是正确的,此时就注意将密码的大小写按服务器上所设置的输入,并在账号密码前号加上双引号(服务器版本不同造成的)。
2.成功后验证dblink
select* from tb_bd_action@branch;--查询创建好的brach库
正常情况下,如果创建dblink成功,可采用该方式访问到远程数据库的表.
3.通过merge语句完成表数据同步
此例中需要将center库中的tb_sys_sqlscripe表同步到branch,简单的语法如下:
merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on(b.pk=c.pk)--从center将表merge到branch,同步的依据是两个表的pk
when matched then update set b.sqlscripe=c.sqlscripe,b.author=c.author--如果pk值是相同则将指定表的值更新到目标表
when not matched then--如果pk值不一至,则将源表中的数据整条插入到目标表中
insert values(c.pk, c.fk, c.createtime, c.lastmodifytime,c.author,c.module,c.deleteflag, c.scripttype);
commit;--记得merge后必须commit,否则更改未能提交
4.为方便每次需要同步时自动完成同步工作,可将该语句做成存储过程或脚本来定时执行或按要求手动执行,简单说一下创建脚本的方法:
a.创建merge文件夹
b.先将merge语句写完整后,存到merge.sql文件中
c.新建merge.bat文件,编辑后写入以下内容
sqlplus user/password@serverip/database@"%cd%\merge.sql"
如何跨Oracle数据库实现表级别的实时同步
一.前言
这个问题是上一篇文章《Oracle跨数据库实现定时同步指定表中的数据》中所提问题的进一步延伸。考虑到对数据的实时性要求比较高,设置成定时同步,有点不妥,需要改善升级更改为实时同步。
下面介绍到的方式,严格意义上说,并没有实现实时同步。是通过Oracle数据库创建同义词+DBlink的方式,来建立远程映射。在查看数据时,直接去远程查询源库中的表。
而我一直关注的是如何进行同步数据,却没有考虑到可以建立映射。另外,还有一点就是需要交代,就是同步到目标数据库中的表,不进行增删改操作,只进行查询的操作,这也是可以使用同义词方式解决问题的关键。
这种解决思路的出现,多亏了在CSDN问答时,热心网友的回答,下面就是问题详情描述。
二.问题描述
有两个Oracle数据库,分别布置在不同的服务器上,系统均为windows2003;
这里暂且说成是一个主数据库和从数据库:
(1)主数据库:oracle_A;
(2)从数据库:oracle_B;
在oracle_A中有一个表table_A与oracle_B中的表table_B结构相同;
我是处在oracle_B,oracle_A数据库分配给我有一个访问oracle_A表table_A的用户,该用户只拥有查询的权限;
另外,需要说明的一点,就是在oracle_B处,只需对table_B表进行查询的操作,不进行其他增删改的操作。
场景介绍完了,我的问题的是,如何在oracle_A中表table_A发生变化时,实时更新同步到oracle_B的table_B中?
我原来的处理方式:
通过建立远程连接DBLink+JOB定时任务+存储过程的方式,实现了定时同步更新,但不能做到实时同步。
三.采用同义词+DB_Link的方式结果步骤
之所以能够选择采用同义词的方式,处理这个问题。主要还是源于在问题描述中提到一个点,那就是我们只需要对同步后的表进行查询操作。这点是使用同义词方式的重要要素。
下面详细模拟一下整个实验测试的过程:
(1)首先在Oracle_A端创建一个对table_A只有查询功能的用户
<1>创建用户
sqlplus/nolog
conn/as sysdba;
create user username identified by password;
<2>查看所有的用户列表
用户创建完成后,查看用户是否创建成功
select* from all_users;
<3>授予权限
为了能够保证能够登陆,必须赋予如下权限
--授予username用户创建session的权限,即登陆权限
grant create session to username;
--授予username用户使用表空间的权限
grant unlimited tablespace to username;
--oracle对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权.
--如果scott用户要授权给username用户查看自己的test表的权限;
sqlplus scott/tiget@localhost:1521/orcl
--授予username用户查看指定的权限
grant select on test to username;
--撤销权限
基本语法同grant,关键字为revoke;
(2)验证用户是否可以成功登录,并进行访问授权的表
--使用sqlplus登录,并进行查询
sqlplus username/password@localhost:1521/orcl;
select* from scott.test;
注意:查询表时,务必带上用户名,说明是哪个用户下的表。
(3)创建远程连接DB_Link
<1>创建远程连接 db_link
create public database link db32connect to tianzhi_test identified by"tianzhi_test" using'192.168.56.6:1521/ORCL'
<2>测试远程连接是否成功
select* from tianzhi_smart.zh_item_news@db32;
(4)在Oracle_B端创建同义词
<1>使用sqlplus登录自己的用户
sqlplus tianzhi_smart/tianzhi_smart@localhost:1521/orcl
<2>创建同义词
create or replace public synonym TEST1130 for scott.TEST@db32;
<3>查询测试
select* from TEST1130;
可以看到这与在Oracle_A源数据库中查到的table_A表中的数据一样.
注意事项:
当远程查询的数据库中包含BLOB字段时,会报出如下错误.
ORA-22992:无法使用从远程表选择的 LOB定位器
当出现这个错误的时候,那是因为跨库连接查询中的表中存在BLOB类型的字段,所以一定要注意,所有表中存在blob类型字段,
不能用 select* from连接的表
不能将blob类型的字段出现在脚本中。
如果这些blob类型的字段一定要导过来,可以先建立临时表再插入本地表,方法如下.在pl/sql中执行
第一步建临时表
create global temporary table foo( X BLOB)
on commit delete rows;
第二步插入本地表
insert into foo select blobcolumn from remoteTable@dl_remote;
如何将正在运行的 Oracle 数据库迁移到另一个系统
在本文提供的示例中,源服务器配置有控制域和一个托管 Oracle数据库的来宾域(名为 ldg1)。控制域名为
primary,也是一个 I/O域。此外,控制域还用作服务域,为来宾域提供虚拟设备服务(虚拟磁盘和虚拟网络)。
作为服务域,控制域提供以下虚拟设备服务:
一个虚拟磁盘服务(primary-vds0),将物理磁盘作为虚拟磁盘导出到来宾域。
一个虚拟控制台集中器服务(primary-vcc0),提供对来宾域虚拟控制台的访问。此服务使用端口范围 5000–5100
来访问虚拟控制台。
一个虚拟交换机服务(primary-vsw0),与主网络接口(nxge0)
关联。
软件安装和配置
按照以下步骤配置您的环境以便进行实时迁移。
安装 Oracle Solaris操作系统
新的 SPARC服务器上预先安装了 Oracle Solaris。对于这些系统,应确保安装了相应的 Oracle Solaris
版本,并验证打了所需的补丁。
要在 SPARC系统上重新安装 Oracle
Solaris,请参见 Oracle
Solaris 10文档或 Oracle
Solaris 11文档。在本文的示例中,操作系统安装在服务器的第一个内部磁盘上。
安装 Oracle Solaris之后,可以配置并启用系统以使用 Oracle VM Server for SPARC 2.1软件。
安装 Oracle VM
Server for SPARC软件
新的 SPARC服务器上也预先安装了 Oracle VM Server for SPARC软件。对于这些系统,应确保安装了相应的 Oracle VM
Server for SPARC版本,并验证打了所有需要的补丁。
如果在服务器上重新安装了 Oracle
Solaris,您可能必须重新安装 Oracle VM Server for SPARC软件。参见 Oracle
VM下载页面。
以下示例显示了在每台物理服务器上执行的操作。每台服务器已经安装了 Oracle Solaris和所需的补丁。
应确保系统固件与您计划安装的 Oracle VM
Server for SPARC版本匹配。参见文档的 Oracle VM
Server for SPARC 2.1版本说明中的“所需软件和补丁”以及 Oracle VM Server for SPARC 2.1
管理指南中的“升级系统固件”。
从 Oracle
VM下载页面下载 Oracle VM Server for SPARC 2.1软件。
解压缩存档文件。
安装 SUNWldm.v
程序包。参见 Oracle VM Server for SPARC 2.1管理指南中的“在新系统上安装 Oracle VM Server
for SPARC软件”。
primary# pkgadd-d OVM_Server_SPARC-2_1/Product SUNWldm.v
配置存储阵列
Sun Storage 2540-M2存储阵列连接到控制域,控制域将两个 LUN(LUN 0和 LUN 1)作为虚拟磁盘导出到来宾域。
来宾域使用第一个 LUN(LUN 0)作为操作系统的系统磁盘,使用第二个 LUN(LUN 1)作为存储 Oracle数据库数据文件的磁盘。
配置控制域
安装 Oracle VM Server for SPARC软件之后,重新配置当前系统使其成为控制域。在每台物理服务器上执行以下操作:
创建一个虚拟控制台集中器(vcc)
服务以供虚拟网络终端服务器后台程序(vntsd)使用,并作为所有逻辑域控制台的集中器。
primary# ldm add-vcc port-range=5000-5100 primary-vcc0 primary
创建虚拟磁盘服务器
(vds)。
primary# ldm add-vds primary-vds0 primary
创建一个虚拟交换机服务(vsw)
以便在逻辑域中的虚拟网络(vnet)设备之间实现联网。
primary# ldm add-vsw net-dev=igb0 primary-vsw0 primary
使用 ldm
list-services命令验证已经创建了这些服务,如清单 1所示。
清单 1.验证服务
primary# ldm list-services primary
VDS
NAME VOLUME OPTIONS DEVICE
primary-vds0
VCC
NAME PORT-RANGE
primary-vcc0 5000-5100
VSW
NAME MAC NET-DEV DEVICE MODE
primary-vsw0 02:04:4f:fb:9f:0d nxge0 switch@0 prog,promisc
VCC
NAME LDOM PORT-RANGE
primary-vcc0 primary 5000-5100
VSW
NAME LDOM MAC NET-DEV ID DEVICE LINKPROP DEFAULT-VLAN-ID PVID VID...
primary-vsw0 primary 00:14:4f:f8:28:c2 igb0 0 switch@0 1 1 1500 on
VDS
NAME LDOM VOLUME OPTIONS MPGROUP DEVICE
primary-vds0 primary
Oracle VM Server for SPARC使用 SSL
对迁移流量进行加密,以保护敏感数据免受利用,并消除了对额外硬件和专用网络的需求;
当源计算机和目标计算机上的主域具有分配的加密单元时,迁移操作的速度会增加。速度增加的原因在于可以将 SSL操作分流到加密单元。
注:SPARC T4 CPU
具有内置的加密指令,因此您不需要为 CPU分配这些指令。
确定控制域中是否有加密设备。
primary# ldm list-o crypto primary
为控制域分配加密资源。
primary# ldm set-crypto 1 primary
为控制域分配 CPU和内存。
您可以通过向源计算机上的主域中添加更多 CPU来减少整体迁移时间。最好为每个主域至少分配 8个 CPU。例如,以下命令为控制域分配 8个 CPU和
4 GB内存。
primary# ldm start-reconf primary
primary# ldm set-vcpu 8 primary
primary# ldm set-memory 4G primary
重新启动系统。
primary# init 6
重新启动系统之后,启用 Oracle VM Server for SPARC并为系统配置一个域:控制域
primary。在控制域中,您可以创建和配置其他域。
确保启用 Logical Domains Manager
(ldmd)和虚拟网络终端服务器(vntsd)服务。
primary# svcadm enable ldmd
primary# svcadm enable vntsd
向服务处理器(SP)
添加逻辑域计算机配置。例如,以下命令添加名为 initial的配置。
primary# ldm add-config initial
验证该配置可以使用。
primary# ldm list-config
factory-default
initial [current]
配置来宾域
配置控制域之后,创建来宾域以用作 Oracle数据库节点。在作为源计算机的物理服务器上,仅创建一个来宾域。另一台物理服务器最终将成为目标计算机。
最初使用以下资源创建来宾域 ldg1:
8 GB内存。
24个 CPU。
一个虚拟网络接口(vnet0),它连接到虚拟交换机 primary-vsw0。
一个虚拟磁盘,它在来宾域中显示为 c0d0并且是存储阵列中的一个 LUN。域 ldg1
使用存储阵列的 LUN 0(c2t6d0)。
另一个虚拟磁盘,它在来宾域中显示为 c0d1并且是存储阵列中的一个 LUN。域 ldg1
使用存储阵列的 LUN 1(c2t6d1)。此虚拟磁盘用于存储 Oracle数据库文件。
执行以下步骤创建每个来宾域:
在源计算机上,从控制域创建
ldg1来宾域。
注:如果您的服务器不是基于
SPARC T4的系统,则仅执行 ldm set-crypto命令。
primary# ldm create ldg1
primary# ldm set-vcpu 24 ldg1
primary# ldm set-memory 8G ldg1
primary# ldm set-crypto 3 ldg1
primary# ldm add-vnet vnet0 primary-vsw0 ldg1
primary# ldm add-vdsdev/dev/dsk/c2t6d0s2 vol1@primary-vds0
primary# ldm add-vdisk vol1 vol1@primary-vds0 ldg1
primary# ldm add-vdsdev/dev/dsk/c2t6d1s2 oradata@primary-vds0
primary# ldm add-vdisk oradata oradata@primary-vds0 ldg1
创建域之后,在源计算机上使用以下命令从控制域绑定并启动来宾域。
primary# ldm bind ldg1
primary# ldm start ldg1
确定域的控制台端口。
primary# ldm ls ldg1
NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME
ldg1 active-n---- 5000 24 8G 0.0% 1h 1m
使用 telnet命令访问
ldg1域的控制台。
primary# telnet localhost 5000
启动来宾域之后,确保在来宾域中安装了相应的 Oracle Solaris操作系统和补丁。您可以通过网络、从 DVD或使用 DVD ISO
映像来执行安装。参见 Oracle VM Server for SPARC 2.1管理指南。
注:LUN
通常在不同服务器上以不同名称显示。控制域中的 LUN名称不需要相同。但是,两个系统上的控制域必须使用相同的卷名(vol1和
oradata)对相同的 LUN(LUN 0和 LUN 1)进行虚拟化。
清单 2的示例显示了如何为名为 ldg1的域配置 8个 CPU、24 GB内存以及 Sun Storage
2540-M2存储阵列中的两个 LUN。
清单 2.域配置示例 primary# ldm ls-l ldg1
NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME
ldg1 active-n---- 5000 24 8G 0.0% 1h 1m
SOFTSTATE
Solaris running
MAC
00:14:4f:fb:96:89
HOSTID
0x84fb9689
CONTROL
failure-policy=ignore
DEPENDENCY
master=
VCPU
VID PID UTIL STRAND
0 16 0.2% 100%
1 17 0.0% 100%
2 18 0.5% 100%
3 19 0.0% 100%
4 20 0.0% 100%
5 21 0.0% 100%
6 22 0.1% 100%
7 23 0.0% 100%
8 24 0.1% 100%
9 25 0.0% 100%
10 26 0.0% 100%
11 27 0.0% 100%
12 28 0.0% 100%
13 29 0.0% 100%
14 30 0.0% 100%
15 31 0.0% 100%
16 32 0.0% 100%
17 33 0.0% 100%
18 34 0.0% 100%
19 35 0.0% 100%
20 36 0.0% 100%
21 37 0.0% 100%
22 38 0.0% 100%
23 39 0.1% 100%
MEMORY
RA PA SIZE
0x8000000 0x408000000 8G
VARIABLES
boot-device=vdisk1
keyboard-layout=US-English
NETWORK
NAME SERVICE ID DEVICE MAC MODE PVID VID MTU LINKPROP
vnet1 primary-vsw0@primary 0 network@0 00:14:4f:f9:c0:62 1 1500
DISK
NAME VOLUME TOUT ID DEVICE SERVER MPGROUP
vdisk1 vol1@primary-vds0 0 disk@0 primary
oradata oradata@primary-vds0 1 disk@1 primary
VCONS
NAME SERVICE PORT
ldg1 primary-vcc0@primary 5000
清单 3的示例显示了控制域的配置。使用 ldm list-services
命令验证已经创建了这些服务。
清单 3.控制域配置示例 primary# ldm ls-services primary
VCC
NAME LDOM PORT-RANGE
primary-vcc0 primary 5000-5100
VSW
NAME LDOM MAC NET-DEV ID DEVICE LINKPROP DEFAULT-VLAN-ID...
primary-vsw0 primary 00:14:4f:f9:32:b0 nxgeg0 0 switch@0 1 1...
VDS
NAME LDOM VOLUME OPTIONS MPGROUP DEVICE
primary-vds0 primary vol1/dev/dsk/c2t6d0s2
oradata/dev/dsk/c2t6d1s2
在来宾域中安装 Oracle Solaris
确保在来宾域中安装了相应的 Oracle Solaris版本,并验证打了所需的补丁。
在来宾域中安装 Oracle Solaris之后,可以配置并启用系统使其使用 Oracle数据库。
安装 Oracle Database
Oracle Database软件的安装类似于标准 Oracle Database安装。首先安装 Oracle
Database,然后应用最新补丁集。使用第二个 LUN创建 UFS或 ZFS文件系统用于存储 Oracle数据库数据文件。
有关针对 Oracle数据库使用 ZFS
的更多信息,请参见针对
Oracle数据库配置 Oracle Solaris ZFS。
准备目标服务器
按如下方式准备目标服务器。
执行以下各节中所述的步骤来准备目标计算机:
安装 Oracle VM
Server for SPARC软件
配置控制域
确保在目标服务器上提供了供待迁移域使用的所有虚拟 I/O服务。
确保目标服务器有权访问同一存储中的 LUN 0和 LUN
1。
要将第一个 LUN(LUN 0)和第二个 LUN(LUN 1)添加到目标计算机,从目标服务器的控制域执行以下命令:
# ldm add-vdsdev/dev/dsk/c2t6d0s2 vol1@primary-vds0
# ldm add-vdsdev/dev/dsk/c2t6d1s2 oradata@primary-vds0
注:LUN
通常在不同服务器上以不同名称显示。控制域中的 LUN名称不需要相同。但是,两个系统上的控制域必须使用相同的卷名(vol1和
oradata)对相同的 LUN(LUN 0和 LUN 1)进行虚拟化。
确保待迁移域中的每个虚拟网络设备在目标计算机上都有一个对应的虚拟网络交换机:
# ldm add-vsw net-dev=nxge0 primary-vsw0 primary
OK,关于oracle数据库同步到另一个数据库和oracle数据库导入dmp的内容到此结束了,希望对大家有所帮助。