oracle10g rac stream 多表复制(本地捕获)

阅读更多

oracle stream 主要是针对数据库而言的,而不是针对实例,所以rac的多表复制(本地捕获)其实跟单实例的多表复制(本地捕获)是一样的,唯一要注意的是rac产生的归档必须在共享磁盘上的同一目录中,同时创建的directory也最好是在共享磁盘上的目录。否则在执行过程中会报错,导致过程不能执行。
一、前提条件:
源数据库(集群数据库rac):

rac节点1:
操作系统:redhat ES5.4
oracle版本:10.2.0.4(64位)
实例名:rac1
数据库名:rac
public ip地址:192.168.1.100
vip:192.168.1.50
priv ip地址:10.0.0.1
global_name:rac

rac节点2:
操作系统:redhat ES5.4
oracle版本:10.2.0.4(64位)
实例名:rac2
数据库名:rac
public ip地址:192.168.1.101
vip:192.168.1.51
priv ip地址:10.0.0.2
global_name:rac

数据库存放在磁盘阵列上,并使用了oracle的分布式文件系统ocfs.

目标数据库(单实例数据库):
操作系统:redhat ES5.4
oracle版本:10.2.0.4(64位)
数据库名:racbak
ip地址:192.168.1.200
global_name:racbak

同步集群数据库rac中ydmm用户下的user、product、price表,同时racbak数据库中必须要有ydmm用户,最好保持密码相同,单向同步,即源同步到目标。源数据库与目标数据库的字符集一定要相同,否则会在导入数据同步的时候报错!

二、设置源和目标数据库初始化参数及归档模式
在这里rac的参数设置及归档模式不同于单实例的相关设置,在此进行详细说明:
在RAC库设为归档模式
修改spfile文件(因为rac的spfile文件为两个节点所共用(我的环境是放在了共享文件系统上了),因此在一个节点上完成便可,以下以rac1为列)
sqlplus "/as sysdba"
SQL>create pfile='/home/oracle/pfilerac.ora' from spfile;
SQL>shutdown immediate
修改/home/oracle/pfilerac.ora文件,增加如下参数
*.log_archive_dest_1='LOCATION=/home/oracle/archivelog'(该目录需人工创建,并且连接到磁盘阵列上的一个分区,也就是说该目录mount到了分布式文件系统上了,rac2也必须有相同的目录并mount到对应的分区上,即rac1和rac2mount的分区相同,当然也可以用ln -s在磁盘上同一目录进行软连接,总之,最后的目的是两个实例产生的日志在磁盘阵列上的同一目录里,两个实例都能互相看到彼此产生的归档日志)
*.log_archive_format='%t_%s_%r.dbf'
将*.cluster_database=true改为*.cluster_database=false
关闭rac1和rac2数据库
root#/etc/init.d/init.crs stop
在rac1上进行如下操作
root#su - oracle
$sqlplus "/as sysdba"
SQL>shutdown immediate
在rac1上起用新的初始化参数
SQL>startup mount pfile='/home/oracle/pfilerac.ora'
SQL>archive log list
SQL>alter database archivelog
完成后将数据库关闭并修改/home/oracle/pfilerac.ora中的*.cluster_database=true
创建新的spfile
sqlplus "/as sysdba"
SQL>startup mount pfile='/home/oracle/pfilerac.ora'
SQL>create spfile from pfile='/home/oracle/pfilerac.ora'
SQL>shutdown immediate
因在rac1上操作,因此会生成$ORACLE_HOME/dbs/spfilerac1.ora,将该文件移动到磁盘阵列共享文件系统上相应目录中替换成spfilerac.ora便可,然后两个节点都启动数据库
root#/etc/init.d/init.crs start

rac上参数修改,方法跟上面修改为归档的办法类似,只是不需要将*.cluster_database=true改为*.cluster_database=false,所要增加的参数,跟以前的一样,在此列一下就可以了:
修改生成的pfile.ora内容如下
*.aq_tm_processes=2 #启用对队列消息的时间监视
*.job_queue_processes=10 #指定例程的 SNP 作业队列进程的数量
以上两个参数为修改的参数
下面的参数为增加的参数
*.global_names='true' #建db_link的设置
*.undo_retention=3600 #控制事务被commit后,undo信息保留的时间
*.nls_date_format='YYYY-MM-DD HH24:MI:SS'
*.streams_pool_size=209715200 #控制streams缓存空间的大小
*.utl_file_dir='*' #设定Oracle只能读写utl_file_dir 指定目录
*.open_links=10 #调用db_link链路数设置

目标数据库初始化参数及归档模式设置:
在此不再多说,请参考前面一章中的相关内容

三、创建stream用户相关环境
略,请参考前面一章中的相关内容

四、配置tnsnames.Ora
在源数据库rac1和rac2实例的tnsnames.Ora都增加如下连接信息
racbak =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racbak)
)
)

在目标数据库的tnsnames.Ora都加如下连接信息
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
)
)
RAC2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac2)
)
)

RAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)

五、创建DB_Link
略,请参考前面一章中的相关内容,rac上只在一个节点创建一次就可以了(数据库就一个),注:db_link的名字跟对应的数据库名一样

六、在源库和目标库创建directory
略,请参考前面一章中的相关内容,rac上只在一个节点创建一次就可以了(数据库就一个),注:rac生成的directory最好在阵列上,跟归档目录/home/oracle/archivelog情况一样

七、执行DBMS_STREAMS_ADM.MAINTAIN_TABLES 过程
SQL>conn strmadmin/strmadmin
SQL>DECLARE
tbls DBMS_UTILITY.UNCL_ARRAY;
BEGIN
tbls(1) := 'ydmm.user';
tbls(2) := 'ydmm.product';
tbls(3) := 'ydmm.price';
DBMS_STREAMS_ADM.MAINTAIN_TABLES(
table_names => tbls,
source_directory_object => 'racdump',
destination_directory_object => 'racbakdump',
source_database => 'rac',
destination_database => 'racbak',
perform_actions => true,
bi_directional => false,
include_ddl => true,
instantiation => DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK);
END;
/

注意:在此instantiation参数我们使用了DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK值,这样就不产生dmp文件而直接将数据传入了目标数据库,所以将dump_file_name、log_file两个参数也取消了。

八、测试验证
可以分别在rac1和rac2上进行操作,看是否同步到目标数据库,具体操作,请参考前面一章中的相关内容。

你可能感兴趣的:(Oracle,SQL,Server,SQL,RedHat)