Oracle流複製配置最佳實踐
一、通用配置
1. 使用Oracle 10.2.0.4版本,並且安裝所有關鍵補訂包
2. 下游捕獲需要源和目標庫執行在相同平臺上
3. 準備源和目標資料庫的redo logs
(1) 配置源和目標庫的archivelog模式
(2) 配置本地歸檔目標路徑,log_archive_dest_1引數,不要使用flash recovery area。
4. 建立流轉用表空間:對於下游捕獲,只在下游捕獲資料庫建立;對於上游捕獲,源和目標庫都建立
CREATE TABLESPACE streams_ts DATAFILE '/ora_data1/migopt/stream01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
5. 建立流管理員資料庫使用者
create user streamsadmin identified by streamsadmin default tablespace streams_ts temporary tablespace temp;
6. 授予流管理許可權和DBA許可權
execute DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('STREAMSADMIN');
grant DBA to streamsadmin;
7. 設定關鍵的初始化引數
AQ_TM_PROCESSES # 1
DB_NAME # SELECT NAME FROM V$DATABASE;
DB_DOMAIN # com
GLOBAL_NAME # TRUE
COMPATIBLE # 10.2
JOB_QUEUE_PROCESSES # 建議最小值是4
_JOB_QUEUE_INTERVAL # 1
TIMED_STATISTICS # TRUE
STATISTICS_LEVEL # TYPICAL
SHARED_POOL_SIZE # 最小256M
STREAMS_POOL_SIZE # 最小256M
8. 建立源和目標庫之間的資料庫鏈
(1) 用streamsadmin登入目標資料庫確認全域性資料庫名
select * from global_name;
(2) 用streamsadmin登入源資料庫建立從源到目標的資料庫鏈,資料庫鏈的名字是上一步的global_name
create database link <global_name_d>
connect to streamsadmin identified by streamsadmin
using '<TNSNAMES.ORA alias entry>';
(3) 在源資料庫上執行下面的查詢來驗證資料庫鏈連通
select * from [email protected]<db_link_name>;
(4) 用streamsadmin登入目標資料庫
(5) 建立從目標到源的資料庫鏈:下游捕捉需要建立;上游捕捉可選建立
create database link <global_name_s>
connect to streamsadmin identified by streamsadmin
using '<TNSNAMES.ORA alias entry>';
(6) 在目標資料庫上執行下面的查詢來驗證資料庫鏈連通
select * from [email protected]<db_link_name>;
9. 用streamsadmin登入在源和目標庫上建立目錄物件
CREATE DIRECTORY streams_dir as '/ora_data1'; # 目標
CREATE DIRECTORY streams_dir as '/db'; # 源
10. 如果選擇複製DDLs,需要處理源和目標庫上物件或表空間名字不一致的問題
(1) 避免系統生成約束或索引的名字
(2) 資料庫間保持相同的表空間名字或者使用一個DDL handler來顯式的處理不一致的名字
二、建議的下流捕獲配置
1. 確認步驟一的所有配置
2. 在源和目標庫上修改初始化引數
源資料庫:
LOG_ARCHIVE_DEST_1=
'LOCATION=+ENG/streamssrc10g/
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
MANDATORY'
LOG_ARCHIVE_DEST_2=
'SERVICE=streamsdest10g_halinux06.us.oracle.com
LGWR ASYNC NOREGISTER VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=streamsdest10g'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=DEFER
LOG_ARCHIVE_CONFIG='SEND, DG_CONFIG=(streamssrc10g,streamsdest10g)'
LOG_ARCHIVE_MAX_PROCESSES=4
# SERVICE是TNS服務名
# DG_CONFIG裡面寫兩個庫的db_unique_name
目的資料庫:
LOG_ARCHIVE_DEST_1=
'LOCATION=use_db_recovery_file_dest
VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)'
LOG_ARCHIVE_DEST_2=
'LOCATION=+ENG/streamsdest10g/arch_srl_streamss/
VALID_FOR=(STANDBY_LOGFILE,PRIMARY_ROLE)'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_CONFIG='RECEIVE, DG_CONFIG=(streamssrc10g,streamsdest10g)'
LOG_ARCHIVE_MAX_PROCESSES=4
3. 在下游資料庫配置standby redo logs
(1) 在源資料庫上查詢v$log檢視找到redo log groups的個數,用下面的公式計算SRLs的數量
Number of SRLs = sum of all production online redo log groups for each thread + number of threads
# threads即instance
(2) 在下游資料庫裡新增standby redo logs
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4
('+ENG/streamsdest10g/standbylog/srl_m1.dbf', '+ENG/streamsdest10g/standbylog/srl_m2.dbf')
SIZE 1024M;
(3) 查詢v$standby_log檢視驗證日誌組和狀態
SELECT GROUP#,SEQUENCE#,STATUS FROM V$STANDBY_LOG;
初始狀態下,sequence#為0,status為UNASSIGNED
4. 在源資料庫上起用遠端歸檔重做日誌目標
(1) 開始傳送redo資料
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' SCOPE=BOTH;
(2) 切換日誌檔案
ALTER SYSTEM SWITCH LOGFILE;
(3) 查詢v$archive_dest_status驗證歸檔日誌目標
SELECT DEST_ID, DEST_NAME, DESTINATION, DATABASE_NAME, SRL, ERROR FROM V$ARCHIVE_DEST_STATUS;
5. 在下游庫上覆制模式,用streamsadmin在下游資料庫上執行:
BEGIN
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
SCHEMA_NAMES => 'TEST1,TEST2,TEST3,TEST4,TEST5,TEST6', # 複製的模式名
SOURCE_DATABASE => 'STREAMSS.US.ORACLE.COM', # 源庫的GLOBAL_NAME
SOURCE_DIRECTORY_OBJECT => 'STREAMS_DIR',
DESTINATION_DATABASE => 'STREAMSD.US.ORACLE.COM', # 目標庫的GLOBAL_NAME
DESTINATION_DIRECTORY_OBJECT => 'STREAMS_DIR',
CAPTURE_QUEUE_NAME => 'DS_STREAMS_QUEUE',
APPLY_QUEUE_NAME => 'DS_STREAMS_QUEUE',
BI_DIRECTIONAL => FALSE,
INCLUDE_DDL => FALSE );
END;
/
# 可以通過查詢dba_recoverable_script檢視和兩個庫上的alert.log檔案來監控執行過程,也可以在過程執行時查詢下游庫上的STREAMS_BUILD_STATUS檢視
CREATE OR REPLACE VIEW STREAMS_BUILD_STATUS AS
SELECT TO_CHAR(rs.creation_time,'HH24:Mi:SS MM/DD/YY') CREATE_DATE,
rs.status, rs.done_block_num||' of '||rs.total_blocks||' Steps Completed' PROGRESS,
TO_CHAR(to_number(sysdate-rs.creation_time)*86400,9999.99) ELAPSED_SECONDS,
substr(to_char(rsb.forward_block),1,100) CURRENT_STEP,
rs.invoking_package||'.'||rs.invoking_procedure PROCEDURE, rs.script_id
FROM DBA_RECOVERABLE_SCRIPT rs,
DBA_RECOVERABLE_SCRIPT_BLOCKS rsb
WHERE rs.script_id = rsb.script_id AND rsb.block_num = rs.done_block_num + 1;
6. 在下游庫上為捕獲程序配置實時挖掘,用streamsadmin在下游資料庫上執行:
BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
capture_name => 'DS_REALTIME_CAPTURE',
parameter => 'downstream_real_time_mine',
value => 'y');
END;
/
7. 驗證下游資料庫
(1) 在源庫上切換日誌
ALTER SYSTEM SWITCH LOGFILE;
(2) 查詢下游庫的v$standby_log檢視
SELECT GROUP#,SEQUENCE#, FIRST_TIME, FIRST_CHANGE#, LAST_CHANGE#, ARCHIVED,STATUS FROM V$STANDBY_LOG;
# 如果FIRST_CHANGE#, LAST_CHANGE#變化,則說明實時挖掘下游捕捉正常配置
三、建議的上游捕捉配置
1. 確認步驟一的所有配置
2. 在源和目標庫上修改初始化引數
源資料庫:
LOG_ARCHIVE_DEST_1=
'LOCATION=+ENG/streamssrc10g/archivelog/
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
MANDATORY'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_MAX_PROCESSES=4
目的資料庫:
LOG_ARCHIVE_DEST_1=
'LOCATION=+CX700/streamsdestb10g/
VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
3. 複製模式,用streamsadmin在源資料庫上執行:
BEGIN
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
SCHEMA_NAMES => 'TEST1,TEST2,TEST3,TEST4,TEST5,TEST6', # 複製的模式名
SOURCE_DATABASE => 'STREAMSS.US.ORACLE.COM', # 源庫的GLOBAL_NAME
SOURCE_DIRECTORY_OBJECT => 'STREAMS_DIR',
DESTINATION_DATABASE => 'STREAMSD.US.ORACLE.COM', # 目標庫的GLOBAL_NAME
DESTINATION_DIRECTORY_OBJECT => 'STREAMS_DIR',
BI_DIRECTIONAL => FALSE,
INCLUDE_DDL => FALSE );
END;
/
# 可以通過查詢dba_recoverable_script檢視和兩個庫上的alert.log檔案來監控執行過程,也可以在過程執行時查詢下游庫上的STREAMS_BUILD_STATUS檢視
CREATE OR REPLACE VIEW STREAMS_BUILD_STATUS AS
SELECT TO_CHAR(rs.creation_time,'HH24:Mi:SS MM/DD/YY') CREATE_DATE,
rs.status, rs.done_block_num||' of '||rs.total_blocks||' Steps Completed' PROGRESS,
TO_CHAR(to_number(sysdate-rs.creation_time)*86400,9999.99) ELAPSED_SECONDS,
substr(to_char(rsb.forward_block),1,100) CURRENT_STEP,
rs.invoking_package||'.'||rs.invoking_procedure PROCEDURE, rs.script_id
FROM DBA_RECOVERABLE_SCRIPT rs,
DBA_RECOVERABLE_SCRIPT_BLOCKS rsb
WHERE rs.script_id = rsb.script_id AND rsb.block_num = rs.done_block_num + 1;
四、配置後任務
1. 設定捕獲程序的CHECKPOINT_RETENTION_TIME引數
BEGIN
DBMS_CAPTURE_ADM.ALTER_CAPTURE(
capture_name => 'DS_REALTIME_CAPTURE',
checkpoint_retention_time => 7 ); # 預設為60
END;
2. 設定應用並行度為4
BEGIN
DBMS_APPLY_ADM.SET_PARAMETER('APPLY$_STREAMSS_36,
'PARALLELISM','4');
END;
/
3. 執行流健康檢查指令碼
Oracle Metalink Note 273674.1.
五、調整網路配置引數
1. 在所有伺服器上設定TCP/IP網路引數
(1) 設定讀寫緩衝區最大值網路核心引數
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
(2) 設定TCP/IP最小、預設、最大緩衝區大小
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
#編輯/etc/sysctl.conf檔案,執行sysctl –p命令生效
2. 設定Oracle Net Session Data Unit (SDU) 大小
修改源庫的SQLNET.ORA檔案,例如:
streamsdest10g_halinux06.us.oracle.com=
(DESCRIPTION=
(SDU=32767)
(ADDRESS=(PROTOCOL=tcp)
(HOST=halinux06vip)
(PORT=1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = streamsd.us.oracle.com))
)
修改目標庫的LISTENER.ORA檔案,例如:
SID_LIST_listener_name=
(SID_LIST=
(SID_DESC=
(SDU=32767)
(GLOBAL_DBNAME=streamsd.us.oracle.com)
(SID_NAME=STRM10g6)
(ORACLE_HOME=/usr/oracle)))
3. 設定TCP Socket Buffer 大小
公式(例如 頻寬1Gbps,RTT 25毫秒):
BDP= 1,000 Mbps * 25msec (.025 sec)1,000,000,000 * .02525,000,000 Megabits / 8 = 3,125,000 bytes
socket buffer size = 3 * bandwidth * delay
= 3,125,000 * 3
= 9,375,000 bytes
修改兩個庫的SQLNET.ORA檔案
streamsdest10g_halinux06.us.oracle.com =
(DESCRIPTION=
(SDU=32767)
(SEND_BUF_SIZE=9375000)
(RECV_BUF_SIZE=9375000)
(ADDRESS=(PROTOCOL=tcp)
(HOST=halinux06vip)(PORT=1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = streamsd.us.oracle.com)))
4. 設定網路裝置佇列大小
例如:
echo 20000 > /proc/sys/net/core/netdev_max_backlog
echo 1 > /proc/sys/net/ipv4/route/flush
ifconfig eth0 txqueuelen 10000
相關推薦
Oracle流複製配置最佳實踐
一、通用配置1. 使用Oracle 10.2.0.4版本,並且安裝所有關鍵補訂包2. 下游捕獲需要源和目標庫執行在相同平臺上3. 準備源和目標資料庫的redo logs(1) 配置源和目標庫的archivelog模式(2) 配置本地歸檔目標路徑,log_archive_des
oracle dataguard網絡最佳實踐一
oracle dataguard best practicesoracle dataguard redo 網絡最佳實踐(簡譯)oracle dataguard好處:1 對系統性能影響最小這裏有兩個最高可用架構(MAA)場景配置,在有足夠帶寬的情況下,得出如下結論:1 DG在紐約和蒙特利爾(300英裏的距離,1
Spring.profiles多環境配置最佳實踐
tex 優先 root cati ans 其他 true 環境 opts 轉自:https://www.cnblogs.com/jason0529/p/6567373.html Spring的profiles機制,是應對多環境下面的一個解決方案,比較常見的是開發和測試環境
前端接收資料流實現圖片預覽效果--ajax 請求二進位制流 圖片 檔案 XMLHttpRequest 請求並處理二進位制流資料 之最佳實踐
本文為轉載文章 原文連結:https://www.cnblogs.com/cdemo/p/5225848.html 首先要謝謝這位大神的無私貢獻!解決了我的問題也完美表達了我當時的心路歷程 ajax 請求二進位制流 圖片 檔案 XMLHttpRequest 請求並處理二進位制流資料 之最佳實踐
Postgresql 10 流複製配置過程
1.主庫建立流複製角色 CREATE ROLE app_rep LOGIN replication ENCRYPTED PASSWORD '[email protected]'; 2.主庫增加pg_hba.conf授信,在最後增加從庫的IP,允許免密訪問
Postgresql 10 流複製配置過程-實測
我是用的兩個NanoPI裝的armbian系統,就是一個小型的ubuntu小型系統,真是太完美了,就是晶片溫度有些高,完全可以當是做UBUNTU最小系統來使用,要用什麼也都可以apt-get就可以搞定,這是後話了(-_-)所以用了兩臺小板兒作了這麼個postgresql流複製
【RESTful】Yii2實現RESTful架構配置最佳實踐
Yii2實現RESTful架構配置最佳實踐 為什麼要用RESTful API 在伺服器端,應用程式狀態和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程式物件、資料庫記錄、演算法等等。每個資源都使用 URI (U
PostgreSQL 主從非同步、同步流複製配置(三)
同步、非同步多從庫複製 在master上連線pocdb 資料庫 ,基於配置二的節點狀態 pocdb=# SELECT client_addr,application_name,sync_state FROM pg_stat_replication; c
ajax 請求二進位制流 圖片 檔案 XMLHttpRequest 請求並處理二進位制流資料 之最佳實踐
寫在前面 :從提出需求到完美的解決問題,實現過程是曲折的。 需求:在前(web client)後(Restful Service)端完全解耦的模式框架下,webclient需要請求 Service 返回的圖片檔案(二進位制流),並在client端顯示。 第一步思考:拿到此需求, 基於程式設計師的狂妄心
ajax 請求二進位制流 圖片 檔案 XMLHttpRequest 請求並處理二進位制流資料 之最佳實踐
寫在前面 :從提出需求到完美的解決問題,實現過程是曲折的。需求:在前(web client)後(Restful Service)端完全解耦的模式框架下,webclient需要請求 Service 返回的圖片檔案(二進位制流),並在client端顯示。第一步思考:拿到此需求,
postgres 簡單流複製配置
postgres流複製類似於oracle的goldengate,在PostgreSQL在9.0之後引入了主備流複製機制,通過流複製,備庫不斷的從主庫同步相應的資料,並在備庫apply每個WAL record,這裡的流複製每次傳輸單位是WAL日誌的record。而
PostgreSQL 主從非同步流複製配置(二)
Stream Replication master防火牆配置 master :10.10.56.16 slave :10.10.56.17 slave :10.10.56.18 slave :10.10.56.19 在 master 上搭
maven+SSM+shiro+junit+jetty+log4j環境配置的最佳實踐
一次 bject catch mapping getbean tco 客戶 包名 目錄 思路大致是 jetty插件 -> junit -> SpringMVC -> Spring -> Mybatis整合 -> shiro整合 -> lo
Oracle數據庫測試和優化最佳實踐: OTest介紹 (轉)
1-1 log 數據 bsp 下載 pan alt style 發送 當前Oracle數據庫最佳測試工具OTest * Otest是用於Oracle數據庫測試、優化、監控軟件。 * Otest是免費提供給Oracle客戶和廣大DBA工程師使用的軟件。由原廠技
PostgreSQL V10邏輯複製最佳實踐
目錄 環境 文件用途 詳細資訊 環境 系統平臺:Linux x86-64 Red Hat Enterprise Linux 7 版本:10.1 文件用途 PostgreSQL V10邏輯複製原理以及作為邏輯複製使用指導 詳細資訊 一、什麼是邏輯複製(pg
Zabbix最佳實踐一:Zabbix Server 的安裝與配置
頻率 .gz tar tle 步驟 ger path dns 發生 一.概述 在開始之前,一些概念和定義需要我們提前了解一下(以下內容摘自官方網站)。 1.1 幾個概念 架構 Zabbix 由幾個主要的功能組件組成,其職責如下所示。 Server Zabbix server
ORACLE 資料同步 容災備份恢復 主從架構 讀寫分離 (OGG,ADG,DSG,高階複製,流複製,logmnr)
ORACLE 幾種同步災備手段(OGG,ADG,DSG,高階複製,流複製,logmnr) 2017年07月14日 13:45:47 小學生湯米 閱讀數:11073 目前所接觸的Oracle 的災備以及同步手段主要有ADG,OGG,DSG,高階複製,流複製以及自主開發的基於
OGG配置sqlserver2005到oracle單向複製
一、概述 實現SQLServer庫到Oracle庫的資料實時同步功能; 源端資料庫型別:sqlserver 2005 目標端資料庫型別:oracle 11gR2 二、OGG實現原理圖 三、源端配置 1、環境準備 作業系統管理許可權使用者登入,安裝vcredist
《流程的永恆之道:工作流及BPM技術的理論、規範、模式及最佳實踐》書籍導讀
編輯推薦 業內深入融合流程管理與流程技術的專著,全面講解了業務流程及其實現,企業打造高效流程型組織的實踐指南。 本書作者是國內資深的工作流及BPM領域專家,現任國內知名的IT上市公司東華軟體股份公司房產事業部執行副總經理。近些年,集首席諮詢顧問、系統分析師、架構師、技
gradle 最全的配置選項 構建最佳實踐
今天推薦給各位的是 figo 同學幾周前的一篇舊文,雖是舊文,我也是才看到,感覺非常不錯,可能還有一些同學同樣錯過,仍然推薦給各位。figo 同學是一位經驗非常豐富的開發者,喜歡分享,其部落格 figotan.org 上文章質量都很高,推薦各位關注。 隨著谷歌對Eclipse的無情拋棄和對Andr