利用oracle快照实现两台数据库服务器表同步
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收藏 我要投稿
Oracle快照及dblink使用(两台服务器数据同步)
--名词说明:源——被同步的数据库
-- 目的——要同步到的数据库
/*一、创建dblink:*/
--1、在目的数据库上,创建dblin
drop database link dblink_anson;
如能正常执行就说明DBLINK没有问题;
4、在数据库A中创建快照日志(当快照的刷新方式为 fast 的时候需要创建,具体刷新方式见最后说明)
Create snapshot log on CROSS;
5、在数据库B中创建相应的快照
Create snapshot CROSS as select * from CROSS@DB_LINK_TEST;
假设要复制(或同步)另一服务器上数据库ora_db1中用户db1的所有表。
1. 创建一个用于连接数据库1(ora_db1)的数据库连接(dblink)
1.1 只有先建立用户db1指定表的快照日志,才能在快照中执行快速刷新。
SQL> select 'create snapshot log on '||table_name||';' from user_tables; --获取用户表的create snapshot语句,如下:
Create public
database link dblink_anson
Connect to lg identified by lg using 'SDLGDB'; Biblioteka -源数据库的用户名、密码、服务器名k
/*二、创建快照:*/
--1、在源和目的数据库上同时执行一下语句,创建要被同步的表
--6、手动刷新快照
begin
dbms_refresh.refresh('"CS"."SN_ANSON"');
end;
===================================================================================================
--oracle自动在1分钟后进行第一次快速刷新,以后每隔10分钟快速刷新一次
Alter snapshot anson refresh complete Start with sysdate+30/24*60*60 next sysdate+1;
--oracle自动在30钞后进行第一次完全刷新,以后每隔1天完全刷新一次
SQL >spool off ;
注意上面这个生成所需表快照的脚本有一定的局限性,如果所需生成快照的表中含有类型为long的列,‘select *'在这里就不会起作用,上面的这个SQL脚本就不能自动建立生成所需快照的脚本,必须通过在select列表中显式地添加long型列名来创建表的快照。下面是一个例子,假如我们要创建快照依赖的表table1中有一个列note类型为long,就需要单独写出如下的创建快照的脚本:
create snapshot log on 表1;
附 删除表快照日志 :
SQL> select 'drop snapshot log on '||substr(table_name,INSTR(table_name,'$_')+2,length(table_name))||';' from user_tables where table_name like '%MLOG$_%';
1) Complete 完全刷新机制,即对表的所有数据进行刷新,如果表的数据量十分庞大的,此法会消耗相当的时间;
2) Fast 快速刷新,即只对数据增量进行刷新;
3) Force 强制刷新,首先判断是否能用快速刷新机制,如不行则用完全刷新机制。
2,若在数据库B上创建快速刷新,则要在数据库A上创建快照日志对象,否则没这个必要,即第4步。
using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
Create snapshot sn_anson as select * from tb_anson@dblink_anson;
--5、设置快照刷新时间
Alter snapshot anson refresh fast Start with sysdate+1/24*60 next sysdate+10/24*60;
相关:
1、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.
手动刷新方式1
begin
dbms_refresh.refresh('cross');
end;
手动刷新方式2
EXEC DBMS_SNAPSHOT.REFRESH('sn_test_user','F'); //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.
==========================================================================================================
Oracle快照及dblink使用(两台服务器数据同步)
2013-09-16 10:12:09 0个评论
SQL > CREATE USER db2
IDENTIFIED BY db2
DEFAULT TABLESPACE snapshot_ts;
SQL > GRANT CONNECT, RESOURCE TO db2;
可以通过下面的SQL语句在ora_db1数据库以db1用户来粗略地估计表空间snapshot_ts的大小。
connect to ITS_L identified by ITSADMIN
using 'orcl_fwq';
2、在数据库A中创建需要被同步的表,如表CROSS,语句就不写了,在数据库B中无需创建表,用快照即可,第5步说明;
3、在数据库B中测试DBLINK
select * from CROSS@DB_LINK_TEST;
--通过上面获取用户表快照日志的删除语句,如下:
drop snapshot log on 表1;
1.2
SQL> CREATE PUBLIC DATABASE LINK testLK CONNECT TO db1 identified by db1
利用oracle快照实现两台数据库服务器表同步
利用oracle快照实现两台数据库服务器表同步。
举例,如源数据库A,目标数据库B,数据库B需要同步数据库A的表CROSS,具体步骤如下:
1、首先在数据库B中创建DBLINK;
-- Create database link
create database link DB_LINK_TEST
SQL >SELECT SUM(bytes)
FROM USER_SEGMENTS
WHERE SEGMENT_NAME IN
(select table_name from user_tables);
3. 运行下面的脚本来生成创建ora_db1数据库上db1用户下代码表的快照脚本:
设置快照刷新在一分钟后执行,并且每隔1分钟执行一次;
一天的秒数=24小时*60分钟*60钞,应为oracle默认加减时间是天。
至此快照同步创建完毕,当数据库A的表CROSS发生数据变化,则相应的数据库B的快照CROSS也会相应的发生变化,时间延期为1分钟。
以上测试环境为oracle 10g。
Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)
2013-04-18 14:22:32 0个评论 收藏 我要投稿
Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)
一、技术实现细节
除非特别说明,下面的SQL命令都是在数据库ora_db2的SYSETM用户下运行的。
'd:\db\snapshot_ts.dbf' SIZE 30M
DEFAULT STORAGE (INITIAL 30 K
NEXT 15 K
MINEXTENTS 1
MAXEXTENTS 100
PCTINCREASE 0)
ONLINE
PERMANENT;
2、查看快照最后一次刷新时间
SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;
3、查看快照下次执行时间
select last_date,next_date,what from user_jobs order by next_date;
(service_name=ora_db1)
)
)';
**出于安全考虑,可以采用一个私有数据连接。
2. 创建一个名为Snapshot_ts的表空间来存放快照,并创建一个和该表空间有关的名为db2的用户。
SQL > CREATE TABLESPACE snapshot_ts DATAFILE
说明:
1,ORACLE的快照刷新方式refresh有三种:
fast 快速刷新,用snapshot log,只更新时间段变动部分
complete 完全刷新,运行SQL语句
force 自动判断刷新,介于fast和complete之间
快照技术提供给我们三种刷新机制,分别是:
select * from tb_anson@dblink_anson;
select * from tb_anson;
--3、在目的数据库上,创建要同步表的快照日志
Create snapshot log on tb_anson;
--4、创建快照,快照(被同步(源)数据库服务必须启动)
这里的快照“CROSS”就可以当做数据库B的同步表使用,数据可删除修改;
在第2步骤中省略了在数据库B中创建表在这里补上了;
6、设置快照刷新时间,可定时触发
Alter snapshot cross refresh fast Start with sysdate+1/1440 next sysdate+1/1440;
drop table tb_anson;
create table tb_anson(c1 varchar2(12));
alter table tb_anson add constraint pk_anson primary key (C1);
--2、在目的数据库上,测试dblink
注意 :在db1下运行下面select ,获得的文件create_snapshot.sql 脚本 在db2下运行。
SQL > spool d:\snap\create_snapshot.sql
SQL >SELECT 'CREATE SNAPSHOT db2.' || TABLE_NAME || ' PCTFREE 10 PCTUSED 40 TABLESPACE snapshot_ts ' || ' STORAGE (INITIAL ' || INITIAL_EXTENT || ' NEXT ' || NEXT_EXTENT || ' PCTINCREASE 0 )' || ' AS SELECT * FROM db1.' || TABLE_NAME ||'@testLK;' FROM USER_TABLES;
Oracle快照及dblink使用(两台服务器数据同步)
--名词说明:源——被同步的数据库
-- 目的——要同步到的数据库
/*一、创建dblink:*/
--1、在目的数据库上,创建dblin
drop database link dblink_anson;
如能正常执行就说明DBLINK没有问题;
4、在数据库A中创建快照日志(当快照的刷新方式为 fast 的时候需要创建,具体刷新方式见最后说明)
Create snapshot log on CROSS;
5、在数据库B中创建相应的快照
Create snapshot CROSS as select * from CROSS@DB_LINK_TEST;
假设要复制(或同步)另一服务器上数据库ora_db1中用户db1的所有表。
1. 创建一个用于连接数据库1(ora_db1)的数据库连接(dblink)
1.1 只有先建立用户db1指定表的快照日志,才能在快照中执行快速刷新。
SQL> select 'create snapshot log on '||table_name||';' from user_tables; --获取用户表的create snapshot语句,如下:
Create public
database link dblink_anson
Connect to lg identified by lg using 'SDLGDB'; Biblioteka -源数据库的用户名、密码、服务器名k
/*二、创建快照:*/
--1、在源和目的数据库上同时执行一下语句,创建要被同步的表
--6、手动刷新快照
begin
dbms_refresh.refresh('"CS"."SN_ANSON"');
end;
===================================================================================================
--oracle自动在1分钟后进行第一次快速刷新,以后每隔10分钟快速刷新一次
Alter snapshot anson refresh complete Start with sysdate+30/24*60*60 next sysdate+1;
--oracle自动在30钞后进行第一次完全刷新,以后每隔1天完全刷新一次
SQL >spool off ;
注意上面这个生成所需表快照的脚本有一定的局限性,如果所需生成快照的表中含有类型为long的列,‘select *'在这里就不会起作用,上面的这个SQL脚本就不能自动建立生成所需快照的脚本,必须通过在select列表中显式地添加long型列名来创建表的快照。下面是一个例子,假如我们要创建快照依赖的表table1中有一个列note类型为long,就需要单独写出如下的创建快照的脚本:
create snapshot log on 表1;
附 删除表快照日志 :
SQL> select 'drop snapshot log on '||substr(table_name,INSTR(table_name,'$_')+2,length(table_name))||';' from user_tables where table_name like '%MLOG$_%';
1) Complete 完全刷新机制,即对表的所有数据进行刷新,如果表的数据量十分庞大的,此法会消耗相当的时间;
2) Fast 快速刷新,即只对数据增量进行刷新;
3) Force 强制刷新,首先判断是否能用快速刷新机制,如不行则用完全刷新机制。
2,若在数据库B上创建快速刷新,则要在数据库A上创建快照日志对象,否则没这个必要,即第4步。
using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
Create snapshot sn_anson as select * from tb_anson@dblink_anson;
--5、设置快照刷新时间
Alter snapshot anson refresh fast Start with sysdate+1/24*60 next sysdate+10/24*60;
相关:
1、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.
手动刷新方式1
begin
dbms_refresh.refresh('cross');
end;
手动刷新方式2
EXEC DBMS_SNAPSHOT.REFRESH('sn_test_user','F'); //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.
==========================================================================================================
Oracle快照及dblink使用(两台服务器数据同步)
2013-09-16 10:12:09 0个评论
SQL > CREATE USER db2
IDENTIFIED BY db2
DEFAULT TABLESPACE snapshot_ts;
SQL > GRANT CONNECT, RESOURCE TO db2;
可以通过下面的SQL语句在ora_db1数据库以db1用户来粗略地估计表空间snapshot_ts的大小。
connect to ITS_L identified by ITSADMIN
using 'orcl_fwq';
2、在数据库A中创建需要被同步的表,如表CROSS,语句就不写了,在数据库B中无需创建表,用快照即可,第5步说明;
3、在数据库B中测试DBLINK
select * from CROSS@DB_LINK_TEST;
--通过上面获取用户表快照日志的删除语句,如下:
drop snapshot log on 表1;
1.2
SQL> CREATE PUBLIC DATABASE LINK testLK CONNECT TO db1 identified by db1
利用oracle快照实现两台数据库服务器表同步
利用oracle快照实现两台数据库服务器表同步。
举例,如源数据库A,目标数据库B,数据库B需要同步数据库A的表CROSS,具体步骤如下:
1、首先在数据库B中创建DBLINK;
-- Create database link
create database link DB_LINK_TEST
SQL >SELECT SUM(bytes)
FROM USER_SEGMENTS
WHERE SEGMENT_NAME IN
(select table_name from user_tables);
3. 运行下面的脚本来生成创建ora_db1数据库上db1用户下代码表的快照脚本:
设置快照刷新在一分钟后执行,并且每隔1分钟执行一次;
一天的秒数=24小时*60分钟*60钞,应为oracle默认加减时间是天。
至此快照同步创建完毕,当数据库A的表CROSS发生数据变化,则相应的数据库B的快照CROSS也会相应的发生变化,时间延期为1分钟。
以上测试环境为oracle 10g。
Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)
2013-04-18 14:22:32 0个评论 收藏 我要投稿
Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)
一、技术实现细节
除非特别说明,下面的SQL命令都是在数据库ora_db2的SYSETM用户下运行的。
'd:\db\snapshot_ts.dbf' SIZE 30M
DEFAULT STORAGE (INITIAL 30 K
NEXT 15 K
MINEXTENTS 1
MAXEXTENTS 100
PCTINCREASE 0)
ONLINE
PERMANENT;
2、查看快照最后一次刷新时间
SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;
3、查看快照下次执行时间
select last_date,next_date,what from user_jobs order by next_date;
(service_name=ora_db1)
)
)';
**出于安全考虑,可以采用一个私有数据连接。
2. 创建一个名为Snapshot_ts的表空间来存放快照,并创建一个和该表空间有关的名为db2的用户。
SQL > CREATE TABLESPACE snapshot_ts DATAFILE
说明:
1,ORACLE的快照刷新方式refresh有三种:
fast 快速刷新,用snapshot log,只更新时间段变动部分
complete 完全刷新,运行SQL语句
force 自动判断刷新,介于fast和complete之间
快照技术提供给我们三种刷新机制,分别是:
select * from tb_anson@dblink_anson;
select * from tb_anson;
--3、在目的数据库上,创建要同步表的快照日志
Create snapshot log on tb_anson;
--4、创建快照,快照(被同步(源)数据库服务必须启动)
这里的快照“CROSS”就可以当做数据库B的同步表使用,数据可删除修改;
在第2步骤中省略了在数据库B中创建表在这里补上了;
6、设置快照刷新时间,可定时触发
Alter snapshot cross refresh fast Start with sysdate+1/1440 next sysdate+1/1440;
drop table tb_anson;
create table tb_anson(c1 varchar2(12));
alter table tb_anson add constraint pk_anson primary key (C1);
--2、在目的数据库上,测试dblink
注意 :在db1下运行下面select ,获得的文件create_snapshot.sql 脚本 在db2下运行。
SQL > spool d:\snap\create_snapshot.sql
SQL >SELECT 'CREATE SNAPSHOT db2.' || TABLE_NAME || ' PCTFREE 10 PCTUSED 40 TABLESPACE snapshot_ts ' || ' STORAGE (INITIAL ' || INITIAL_EXTENT || ' NEXT ' || NEXT_EXTENT || ' PCTINCREASE 0 )' || ' AS SELECT * FROM db1.' || TABLE_NAME ||'@testLK;' FROM USER_TABLES;