oracle自動化同步兩庫使用者的統計資訊
一些測試需求,需要同步兩庫使用者的統計資訊,例如需要生產環境的統計資訊同步到測試庫,可以透過dbms_stats下的包export_*/import_*配合dblink來實現。
以下舉例:
DB VERSION:11.2.0.4
源庫:ct6601
目標庫:ct6602
步驟1:源庫,新建用於匯出使用者統計資訊的表
begin
dbms_stats.create_stat_table(ownname => 'scott',
stattab => 'tb_stats',
tblspace => 'users');
end;
步驟2:源庫,新建用於匯出使用者統計資訊的儲存過程
--此處以日期來標記statid
create or replace procedure scott.p_export_statistics as
v_statid varchar2(30) := 'D' || to_char(sysdate, 'yyyymmdd');
begin
dbms_stats.export_table_stats(ownname => 'scott',
tabname => 'dept',
stattab => 'tb_stats',
statid => v_statid,
statown => 'scott');
end;
步驟3:源庫,新建用於匯出使用者統計資訊的JOB
declare
v_job number;
begin
--具體頻率根據需求
sys.dbms_job.submit(job => v_job,
what => 'begin
scott.p_export_statistics;
end;',
next_date => to_date('19-05-2017 11:39:50',
'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate+1,''dd'')+1/24');
commit;
end;
步驟4:目標庫,新建dblink用於讀取源庫的scott.tb_stats表
create public database link LNK_CT6601
connect to SYSTEM
using 'ct6601';
步驟5:目標庫,新建全域性臨時表用於臨時存過源庫的scott.tb_stats表的資料
--此處用preserve rows,因為可能要import多個使用者的統計資訊
CREATE GLOBAL TEMPORARY TABLE scott.tb_temp_stats
ON COMMIT preserve rows
as select * from SCOTT.tb_stats@LNK_CT6601 where 1=2;
步驟6:目標庫,新建同步使用者統計資訊的儲存過程
--透過statid只同步源庫某一天的統計資訊過來,並在同步之後鎖定統計資訊
create or replace procedure scott.p_sync_statistics as
v_statid varchar2(30) := 'D' || to_char(sysdate, 'yyyymmdd');
begin
begin
insert into scott.tb_temp_stats
select * from SCOTT.tb_stats@LNK_CT6601 where statid = v_statid;
commit;
dbms_stats.import_schema_stats(ownname => 'scott',
stattab => 'tb_temp_stats',
statid => v_statid,
statown => 'scott',
force => true);
dbms_stats.lock_schema_stats(ownname => 'scott');
end;
end;
步驟7:目標庫,新建同步使用者統計資訊的JOB
--具體頻率根據需求
declare
v_job number;
begin
sys.dbms_job.submit(job => v_job,
what => 'begin
scott.p_sync_statistics;
end;',
next_date => to_date('19-05-2017 11:39:50',
'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate+1,''dd'')+3/24');
commit;
end;
備註:
1.此方案可以用於同步表級、使用者級、資料庫級的統計資訊。
2.源庫統計資訊表scott.tb_stats,可以根據需要定期清理歷史資料。
以下舉例:
DB VERSION:11.2.0.4
源庫:ct6601
目標庫:ct6602
步驟1:源庫,新建用於匯出使用者統計資訊的表
begin
dbms_stats.create_stat_table(ownname => 'scott',
stattab => 'tb_stats',
tblspace => 'users');
end;
步驟2:源庫,新建用於匯出使用者統計資訊的儲存過程
--此處以日期來標記statid
create or replace procedure scott.p_export_statistics as
v_statid varchar2(30) := 'D' || to_char(sysdate, 'yyyymmdd');
begin
dbms_stats.export_table_stats(ownname => 'scott',
tabname => 'dept',
stattab => 'tb_stats',
statid => v_statid,
statown => 'scott');
end;
步驟3:源庫,新建用於匯出使用者統計資訊的JOB
declare
v_job number;
begin
--具體頻率根據需求
sys.dbms_job.submit(job => v_job,
what => 'begin
scott.p_export_statistics;
end;',
next_date => to_date('19-05-2017 11:39:50',
'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate+1,''dd'')+1/24');
commit;
end;
步驟4:目標庫,新建dblink用於讀取源庫的scott.tb_stats表
create public database link LNK_CT6601
connect to SYSTEM
using 'ct6601';
步驟5:目標庫,新建全域性臨時表用於臨時存過源庫的scott.tb_stats表的資料
--此處用preserve rows,因為可能要import多個使用者的統計資訊
CREATE GLOBAL TEMPORARY TABLE scott.tb_temp_stats
ON COMMIT preserve rows
as select * from SCOTT.tb_stats@LNK_CT6601 where 1=2;
步驟6:目標庫,新建同步使用者統計資訊的儲存過程
--透過statid只同步源庫某一天的統計資訊過來,並在同步之後鎖定統計資訊
create or replace procedure scott.p_sync_statistics as
v_statid varchar2(30) := 'D' || to_char(sysdate, 'yyyymmdd');
begin
begin
insert into scott.tb_temp_stats
select * from SCOTT.tb_stats@LNK_CT6601 where statid = v_statid;
commit;
dbms_stats.import_schema_stats(ownname => 'scott',
stattab => 'tb_temp_stats',
statid => v_statid,
statown => 'scott',
force => true);
dbms_stats.lock_schema_stats(ownname => 'scott');
end;
end;
步驟7:目標庫,新建同步使用者統計資訊的JOB
--具體頻率根據需求
declare
v_job number;
begin
sys.dbms_job.submit(job => v_job,
what => 'begin
scott.p_sync_statistics;
end;',
next_date => to_date('19-05-2017 11:39:50',
'dd-mm-yyyy hh24:mi:ss'),
interval => 'trunc(sysdate+1,''dd'')+3/24');
commit;
end;
備註:
1.此方案可以用於同步表級、使用者級、資料庫級的統計資訊。
2.源庫統計資訊表scott.tb_stats,可以根據需要定期清理歷史資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-2139545/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle統計資訊自動收集Oracle
- 關於ORACLE自動統計CBO統計資訊Oracle
- 關於oracle自動收集統計資訊Oracle
- Oracle的自動統計資訊不收集直方圖的資訊Oracle直方圖
- Oracle10g 統計資訊的自動收集Oracle
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- Oracle11g 統計資訊-----統計資訊自動收集任務Oracle
- Oracle11g 統計資訊——統計資訊自動收集任務Oracle
- 【Oracle】11g Oracle自動收集統計資訊Oracle
- 效能優化——統計資訊——SQLServer自動更新和自動建立統計資訊選項 (轉載)優化SQLServer
- ORACLE 11g 自動收集統計資訊Oracle
- 關於ORACLE自動統計CBO統計資訊[轉帖]Oracle
- Oracle的奇葩設定之自動統計資訊更新Oracle
- Oracle 11g 之自動收集統計資訊Oracle
- ORACLE10g自動收集CBO統計資訊Oracle
- Oracle10g 優化統計資訊(自動)不包含統計分割槽表中的local index ?Oracle優化Index
- Oracle 11g無法自動收集統計資訊Oracle
- oracle 11g自動收集統計資訊介紹Oracle
- oracle 統計資訊過期判斷和自動收集Oracle
- Oracle10g 自動統計資訊(dbms_stats)Oracle
- 開啟oracle10g統計資訊自動收集功能Oracle
- 【統計資訊】Oracle統計資訊Oracle
- 雞肋 -- ORACLE10g自動收集CBO統計資訊(ZT)Oracle
- oracle10g如何啟用禁用自動統計資訊收集Oracle
- Oracle 11g系統自動收集統計資訊的一些知識Oracle
- Oracle 11g 修改表級別的自動收集統計資訊比率Oracle
- Oracle的統計資訊Oracle
- Sqlserver關於統計資訊自動建立自動更新的知識點SQLServer
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 利用Git-hook自動配置不同倉庫的使用者資訊GitHook
- [zt] Oracle10g 自動收集收集CBO統計資訊設定Oracle
- oracle 10g的自動統計分析Oracle 10g
- Greenplum自動統計資訊收集-暨統計資訊不準引入的broadcastmotion一例AST
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- Oracle10g AWR (自動工作負載資訊庫)Oracle負載
- Oracle中自動工作負載資訊庫(AWR)介紹Oracle負載
- 關閉及開啟oracle10g統計資訊自動收集功能Oracle
- 修改oracle 的統計資訊Oracle