前几天,老大让我玩玩数据库,俺就没有认真玩过这个东西.老大说别担心,有我.结果第二天消失了……根据十分可靠的消息说:陪同某美工同志去广东出差了.好吧,我承认在这一刻,我幼小的心灵受到了沉重的打击.好在javaeye中有牛人,根据他的步骤我完成了一个简单的数据库同步复制.这样,我就整理下下.
我使用的oracle版本是10g,使用了pl/sql developer作为数据库的管理开发工具.
当然,首先必须确定数据库具备高级复制功能.通常的方法是使用sys以sysdba登陆数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能,否则不支持.
这时,我们新建两个数据库IBM和ORA.同时我们假设IBM数据库的IP为10.85.131.50,ORA数据库的IP为10.85.131.57.主站点为IBM,在这里,主站点是主要配置复制工作的站点.
依据大众考虑,用sys或者system登陆IBM数据库,创建一个复制管理员repadmin(网上都取这个狗血名字,我也就不免这个俗了)
另外创建一个用户,这里就叫huawei,称之为应用用户.
创建一个表空间,叫HUAWEI.
上述是我们高复制同步数据的先决条件.
接下来,我们开始——复制开始~!
创建用户语句
CREATE USER HUAWEI IDENTIFIED BY HUAWEI DEFAULT TABLESPACE HUAWEI TEMPORARY
TABLESPACE TEMP;
GRANT DBA TO HUAWEI;
创建数据库管理员用户repadmin(这里再次吐槽一下这个名字)
CREATE USER REPADMIN IDENTIFIED BY REPADMIN;
ALTER USER REPADMIN DEFAULT TABLESPACE USERS;
ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP;
GRANT connect,resource TO REPADMIN;
授予repadmin用户权限可以管理当前站点中任何主体组
EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');
授予repadmin用户权限可以为任何表创建snapshot logs
GRANT comment any table TO REPADMIN;
GRANT lock any table TO REPADMIN;
指定repadmin用户为propagator,并授予执行任何procedure的权限
EXECUTE dbms_defer_sys.register_propagator('REPADMIN');
GRANT execute any procedure TO REPADMIN;
更改IBM数据库的全局名称
alter database rename global_name to IBM.COM.CN;
更改ORA数据库的全局名称
alter database rename global_name to ORA.COM.CN;
在ORA数据库的tnsnames.ora中添加
IBM=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.131.50)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = IBM)
)
)
在IBM数据库的tnsnames.ora中添加
ORA=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.131.57)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = ORA)
)
)
在IBM数据库中建立连接
create public database link ora.com.cn connect to REPADMIN identified by REPADMIN
using 'ORA';
在ORA数据库中建立连接
create public database link ibm.com.cn connect to REPADMIN identified by REPADMIN
using 'IBM';
在两个数据库的应用用户huawei下创建表.注意:这里是分别是两个数据库的huawei用户
CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));
以REPADMIN登录数据库IBM
execute dbms_repcat.create_master_repgroup('rep_ibm');
execute dbms_repcat.create_master_repgroup('repg');
在复制组里加入复制对象
execute dbms_repcat.create_master_repobject
(sname=>'huawei',oname=>'test',type=>'table',use_existing_object=>true,gname=>'repg',copy_rows=>false);
对复制对象产生复制支持
execute dbms_repcat.generate_replication_support('huawei','test','table');
添加主体复制节点
execute dbms_repcat.add_master_database
(gname=>'repg',master=>'ora.com.cn',use_existing_objects=>true,copy_rows=>false,
propagation_mode => 'synchronous');
在主体定义站点启动复制
execute dbms_repcat.resume_master_activity('repg',true);
在ora数据中运行
execute dbms_repcat.create_master_repgroup('rep_ibm');
配置至此完成,向数据库中添加数据,修改数据,删除数据即可以同步.