oracle數據庫的快照是一個表,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。也就是說快照根本的原理就是將本地或遠程數據庫上的一個查詢結果保存在一個表中。
如下是創建的Snapshot,目的是從業務數據庫上將數據Copy處處理數據庫上,是不一樣的兩個服務器之間對數據copy。
第一步:在處理服務器上的Oracle終端,創建database link,業務數據庫服務器SID爲TEST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using 'test';
第二步:在業務數據庫上對應的表創建快照日誌 (若是建立的是快速刷新,則須要這步)
Create snapshot log on A_Table;
第三步:創建Snapshot 快照名稱爲:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
說明:REFRESH 是刷新方法
刷新方式有:COMPLETE 和FAST和force三種:
fast 快速刷新,用snapshot log,只更新時間段變更部分
complete 徹底刷新,運行SQL語句
force 自動判斷刷新,介於fast和complete之間
而START WITH 是說明開始執行的時間。
Next是下次執行的時間
而AS之後是構成快照的查詢方法。
相關的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手動刷新快照 在命令界面執行:
EXEC DBMS_SNAPSHOT.REFRESH('Test_SnapShot ','C');
第一個參數是要刷新的快照名
第二個參數是刷新的方式,F----FAST, C---COMPLETE
查看快照最後刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;
最後很是的方案:
1:爲須要作Snapshot的表創建Snapshot日誌
create snapshot log on t1 with rowid; 這裏使用ROWID創建日記的參數
2:採用Fast的方式創建快照,使用rowid作爲參考參數
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
最好能按照rowid來創建快照。要否則就必需要爲表創建Primary Key。
Oracle 快照及 dblink使用 (兩臺服務器數據同步)
--名詞說明:源——被同步的數據庫
-- 目的——要同步到的數據庫
/*1、建立dblink:*/
--一、在目的數據庫上,建立dblin
drop database link dblink_anson;
Create public
database link dblink_anson
Connect to lg identified by lg using 'SDLGDB';
--源數據庫的用戶名、密碼、服務器名k
/*2、建立快照:*/
--一、在源和目的數據庫上同時執行一下語句,建立要被同步的表
drop table tb_anson;
create table tb_anson(c1 varchar2(12));
alter table tb_anson add constraint pk_anson primary key (C1);
--二、在目的數據庫上,測試dblink
select * from tb_anson@dblink_anson;
select * from tb_anson;
--三、在源數據庫上,建立要同步表的快照日誌
Create snapshot log on tb_anson;
--四、建立快照,快照(被同步(源)數據庫服務必須啓動)
Create snapshot sn_anson as select * from tb_anson@dblink_anson;
--五、設置快照刷新時間
Alter snapshot anson refresh fast Start with sysdate+1/24*60 next sysdate+10/24*60;
--oracle自動在1分鐘後進行第一次快速刷新,之後每隔10分鐘快速刷新一次
Alter snapshot anson refresh complete Start with sysdate+30/24*60*60 next sysdate+1;
--oracle自動在30鈔後進行第一次徹底刷新,之後每隔1天徹底刷新一次
--六、手動刷新快照
begin
dbms_refresh.refresh('"CS"."SN_ANSON"');
end; 數據庫