要求:现有2台数据库服务器A和B,都在一个局域网内。A数据库的数据实时更新,B数据库做为A的备份数据库,要求B数据库跟A数据库的数据同步,以便于分析统计?
方法:在B数据库上面建快照,来影射A上面的数据。
1,在B数据库上面创建一个服务名,以访问A数据库。例如
to101=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST=www.bj.col.com.cn)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test)
)
)
2,在B数据库上创建数据库链路。例如
create public database link link101
connect to scott identified by tiger
using 'to101';
3,在B数据库上创建快照。这里只影射A数据库的中的一张表(tab1), 代码如下:
create snapshot tab1
refresh force start with sysdate
next sysdate+1/1440 with primary key as select * from tab1@link101;
OK,这样就在B数据库上创建了一个快照对象(tab1),基本上跟A数据库中的表(tab1)一样了。B数据库上的这个快照对象每隔1分钟刷新一下,去跟A数据库保持一致。
说明:
1,ORACLE的快照刷新方式refresh有三种:
fast 快速刷新,用snapshot log,只更新时间段变动部分
complete 完全刷新,运行SQL语句
force 自动判断刷新,介于fast和complete之间
2,若在B上创建快速刷新,则要在A上创建快照日志对象,否则没这个必要。
在A上创建快照日志,代码如下:
create snapshot log on tab1 with primary key;
3,说明,B中的快照对象 tab1 既有表的特征也有视图的特征。因为它的数据存在本地磁盘上,但是它的数据又不允许编辑,只能查询。估计它就是所谓的物化视图吧。
方法:在B数据库上面建快照,来影射A上面的数据。
1,在B数据库上面创建一个服务名,以访问A数据库。例如
to101=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST=www.bj.col.com.cn)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test)
)
)
2,在B数据库上创建数据库链路。例如
create public database link link101
connect to scott identified by tiger
using 'to101';
3,在B数据库上创建快照。这里只影射A数据库的中的一张表(tab1), 代码如下:
create snapshot tab1
refresh force start with sysdate
next sysdate+1/1440 with primary key as select * from tab1@link101;
OK,这样就在B数据库上创建了一个快照对象(tab1),基本上跟A数据库中的表(tab1)一样了。B数据库上的这个快照对象每隔1分钟刷新一下,去跟A数据库保持一致。
说明:
1,ORACLE的快照刷新方式refresh有三种:
fast 快速刷新,用snapshot log,只更新时间段变动部分
complete 完全刷新,运行SQL语句
force 自动判断刷新,介于fast和complete之间
2,若在B上创建快速刷新,则要在A上创建快照日志对象,否则没这个必要。
在A上创建快照日志,代码如下:
create snapshot log on tab1 with primary key;
3,说明,B中的快照对象 tab1 既有表的特征也有视图的特征。因为它的数据存在本地磁盘上,但是它的数据又不允许编辑,只能查询。估计它就是所谓的物化视图吧。