
Oracle如何实现两个数据库的同步(用实体化视图实现)(Oracle快照实例)
1个回答
展开全部
Oracle如何实现两个数据库的同步(用实体化视图实现)(Oracle快照实例)
一、技术实现细节 除非特别说明,下面的SQL命令都是在数据库ora_db2的SYSETM用户下运行的。假设要复制(或同步)另一服务器上数据库ora_db1中用户db1的所有表。
1. 创建一个用于连接数据库1(ora_db1)的数据库连接(dblink)
SQL> CREATE PUBLIC DATABASE LINK testLK CONNECT TO db1 identified by db1using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)))(CONNECT_DATA =(service_name=ora_db1)))';
**出于安全考虑,可以采用一个私有数据连接。
2. 创建一个名为Snapshot_ts的表空间来存放快照,,并创建一个和该表空间有关的名为db2的用户。
SQL > CREATE TABLESPACE snapshot_ts DATAFILE'd:\db\snapshot_ts.dbf' SIZE 30M DEFAULT STORAGE (INITIAL 30 K NEXT 15 K MINEXTENTS 1 MAXEXTENTS 100 PCTINCREASE 0) ONLINE PERMANENT;
SQL > CREATE USER db2 IDENTIFIED BY db2 DEFAULT TABLESPACE snapshot_ts;
SQL > GRANT CONNECT, RESOURCE TO db2;
可以通过下面的SQL语句在ora_db1数据库以db1用户来粗略地估计表空间snapshot_ts的大小。
SQL >SELECT SUM(bytes) FROM USER_SEGMENTS WHERE SEGMENT_NAME IN (select table_name from user_tables);
3. 运行下面的脚本来生成创建ora_db1数据库上db1用户下代码表的快照脚本:
注意 :在db1下运行下面select ,获得的文件create_snapshot.sql 脚本 在db2下运行。
SQL > spool d:\snap\create_snapshot.sql
注意上面这个生成所需表快照的脚本有一定的局限性,如果所需生成快照的表中含有类型为long的列,‘select *'在这里就不会起作用,上面的这个SQL脚本就不能自动建立生成所需快照的脚本,必须通过在select列表中显式地添加long型列名来创建表的快照。下面是一个例子,假如我们要创建快照依赖的表table1中有一个列note类型为long,就需要单独写出如下的创建快照的脚本:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询