Oracle10g新特性之stream流配置
Oracle10g新特性之stream流配置
主資料庫:
作業系統:Linux AS 45
IP地址:192.168.3.46
資料庫:Oracle 10.2.0.2
ORACLE_SID:prod
Global_name:prod
從資料庫:
作業系統:Linux AS 45
IP地址:192.168.3.47
資料庫:Oracle 10.2.0.2
ORACLE_SID:testdb
Global_name:testdb
一、在主庫建立BAOPAY使用者表空間、使用者及授權
create tablespace BAOPAY DATAFILE '/data/oracle/oradata/prod/BAOPAY.dbf' SIZE
2048M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
create tablespace BAOPAY_INDEX DATAFILE '/data/oracle/oradata/prod/BAOPAY_INDEX.dbf' SIZE
2048M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE
DATAFILE '/data/oracle/oradata/prod/BAOPAY.dbf' AUTOEXTEND
ON NEXT 100M MAXSIZE 32767M;
ALTER DATABASE
DATAFILE '/data/oracle/oradata/prod/BAOPAY_INDEX.dbf' AUTOEXTEND
ON NEXT 100M MAXSIZE 32767M;
CREATE USER BAOPAY IDENTIFIED BY BAOPAY DEFAULT TABLESPACE BAOPAY TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;
GRANT CONNECT TO BAOPAY;
GRANT RESOURCE TO BAOPAY;
GRANT DBA TO BAOPAY;
二、在主庫匯入使用者資料
imp baopay/baopay file=/backup/expdp/baopay_new.dmp log=/backup/expdp/imp_baopay_new.log fromuser=baopay touser=baopay
sqlplus / as sysdba
GRANT CREATE JOB TO BAOPAY;
GRANT CREATE VIEW TO BAOPAY;
GRANT DEBUG CONNECT SESSION TO BAOPAY;
revoke dba from baopay;
alter user baopay quota unlimited on baopay;
alter user baopay quota unlimited on baopay_index;
三、分別在主、從資料庫中執行以下語句,並重啟資料庫
Sqlplus / as sysdba
alter system set aq_tm_processes=2 scope=both;
alter system set global_names=true scope=both;
alter system set job_queue_processes=10 scope=both;
alter system set parallel_max_servers=20 scope=both;
alter system set undo_retention=3600 scope=both;
alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
alter system set streams_pool_size=200M scope=spfile;
alter system set utl_file_dir='*' scope=spfile;
alter system set open_links=4 scope=spfile;
四、將主資料庫修改為歸檔模式(alter system reset log_archive_start scope=spfile sid='*';)
sqlplus '/ as sysdba'
alter system set log_archive_dest_1='location=/data/arch' scope=spfile;
//alter system set log_archive_start=TRUE scope=spfile;(此引數在oracle 10g已經廢棄)
alter system set log_archive_format='arch%t_%s_%r.arc' scope=spfile;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
SQL> show parameter archive_start
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean FALSE
五、分別在主從庫中建立stream管理使用者、表空間及授權
create tablespace tbs_stream datafile '/data/oracle/oradata/prod/tbs_stream01.dbf' size 1024m autoextend on maxsize unlimited segment space management auto;
execute dbms_logmnr_d.set_tablespace('tbs_stream');
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp;
grant connect,resource,dba,aq_administrator_role to strmadmin;
begin
dbms_streams_auth.grant_admin_privilege(
grantee => 'strmadmin',
grant_privileges => true);
end;
/
六、配置網路連線
配置主環境tnsnames.ora
主資料庫(tnsnames.ora)中新增從資料庫的配置。
TESTDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.47)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = testdb)
)
)
配置從環境tnsnames.ora
從資料庫(tnsnames.ora)中新增從資料庫的配置。
PROD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.46)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = prod)
)
)
七、在主庫中啟用追加日誌
alter database add supplemental log data;
八、建立DBlink
show parameter global_names
select * from global_name;
建立主資料庫資料庫鏈
sqlplus / as sysdba
alter database rename global_name to PROD;
#以strmadmin身份,登入主資料庫。
sqlplus strmadmin/strmadmin
#建立資料庫鏈
create database link TESTDB connect to strmadmin identified by strmadmin using 'TESTDB';
建立從資料庫資料庫鏈
sqlplus / as sysdba
alter database rename global_name to TESTDB;
#以strmadmin身份,登入從資料庫。
sqlplus strmadmin/strmadmin
#建立資料庫鏈
create database link PROD connect to strmadmin identified by strmadmin using 'PROD';
九、建立流佇列
建立主庫流佇列
以下是引用片段:
#以strmadmin身份,登入主資料庫。
sqlplus strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'PROD_queue_table',
queue_name => 'PROD_queue');
end;
/
建立從庫流佇列
以下是引用片段:
#以strmadmin身份,登入從資料庫。
sqlplus strmadmin/strmadmin
begin
dbms_streams_adm.set_up_queue(
queue_table => 'TESTDB_queue_table',
queue_name => 'TESTDB_queue');
end;
/
十、在主資料庫中建立捕獲程式
sqlplus strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'baopay',
streams_type => 'capture',
streams_name => 'capture_PROD',
queue_name => 'strmadmin.PROD_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/
十一、進行邏輯複製資料庫:(此操作必須在建立捕獲程式之後,傳播程式之前,切忌)
主資料庫執行:
exp userid=baopay/baopay file=/backup/expdp/baopay.dmp log=/backup/expdp/baopay.log object_consistent=y rows=y
scp baopay.dmp oracle@192.168.3.47:/backup/expdp
從資料庫執行:
create tablespace BAOPAY DATAFILE '/data/oracle/oradata/testdb/BAOPAY.dbf' SIZE
2048M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
create tablespace BAOPAY_INDEX DATAFILE '/data/oracle/oradata/testdb/BAOPAY_INDEX.dbf' SIZE
2048M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE
DATAFILE '/data/oracle/oradata/testdb/BAOPAY.dbf' AUTOEXTEND
ON NEXT 100M MAXSIZE 32767M;
ALTER DATABASE
DATAFILE '/data/oracle/oradata/testdb/BAOPAY_INDEX.dbf' AUTOEXTEND
ON NEXT 100M MAXSIZE 32767M;
CREATE USER BAOPAY IDENTIFIED BY BAOPAY DEFAULT TABLESPACE BAOPAY TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;
GRANT CONNECT TO BAOPAY;
GRANT RESOURCE TO BAOPAY;
GRANT DBA TO BAOPAY;
imp userid=baopay/baopay file=/backup/expdp/baopay.dmp log=/backup/expdp/imp_baopay.log fromuser=baopay touser=baopay ignore=y commit=y streams_instantiation=y
sqlplus / as sysdba
GRANT CREATE JOB TO BAOPAY;
GRANT CREATE VIEW TO BAOPAY;
GRANT DEBUG CONNECT SESSION TO BAOPAY;
revoke dba from baopay;
alter user baopay quota unlimited on baopay;
alter user baopay quota unlimited on baopay_index;
十二、建立傳播程式
#以strmadmin身份,登入主資料庫。
sqlplus strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'baopay',
streams_name => 'PROD_to_TESTDB',
source_queue_name => 'strmadmin.PROD_queue',
destination_queue_name => ,
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'prod',
inclusion_rule => true);
end;
/
#修改propagation休眠時間為0,表示實時傳播LCR。
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'PROD_queue',
destination => 'TESTDB',
latency => 0);
end;
/
十三、建立應用程式
#以strmadmin身份,登入從資料庫。
sqlplus strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'baopay',
streams_type => 'apply',
streams_name => 'apply_TESTDB',
queue_name => 'strmadmin.TESTDB_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'prod',
inclusion_rule => true);
end;
/
十四、啟動STREAM
#以strmadmin身份,登入從資料庫。
sqlplus strmadmin/strmadmin
#啟動Apply程式
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_TESTDB');
end;
/
#以strmadmin身份,登入主資料庫。
sqlplus strmadmin/strmadmin
#啟動Capture程式
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_PROD');
end;
/
十五、停止STREAM
#以strmadmin身份,登入主資料庫。
sqlplus strmadmin/strmadmin
#停止Capture程式
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_PROD');
end;
/
#以strmadmin身份,登入從資料庫。
sqlplus strmadmin/strmadmin
#停止Apply程式
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_TESTDB');
end;
/
十六、清除所有配置資訊
要清楚Stream配置資訊,需要先執行第十五步,停止Stream程式。
接著執行:
#以strmadmin身份,登入主資料庫。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration();
#以strmadmin身份,登入從資料庫。
connect strmadmin/strmadmin
exec DBMS_STREAMS_ADM.remove_streams_configuration();
問題診斷
5.1 如何知道捕捉(Capture)程式是否執行正常?
以strmadmin身份,登入主資料庫,執行如下語句:
SQL> SELECT CAPTURE_NAME,
QUEUE_NAME,
RULE_SET_NAME,
NEGATIVE_RULE_SET_NAME,
STATUS
FROM DBA_CAPTURE;
結果顯示如下:
CAPTURE_NAME QUEUE_NAME
------------------------------ ------------------------------
RULE_SET_NAME NEGATIVE_RULE_SET_NAME STATUS
------------------------------ ------------------------------ --------
CAPTURE_PROD PROD_QUEUE
RULESET$_14 ENABLED
ENABLED
如果STATUS狀態是ENABLED,表示Capture程式執行正常;
如果STATUS狀態是DISABLED,表示Capture程式處於停止狀態,只需重新啟動即可;
如果STATUS狀態是ABORTED,表示Capture程式非正常停止,查詢相應的ERROR_NUMBER、ERROR_MESSAGE列可以得到詳細的資訊;同時,Oracle會在跟蹤檔案中記錄該資訊。
5.2 如何知道Captured LCR是否有傳播GAP?
以strmadmin身份,登入主資料庫,執行如下語句:
SQL> SELECT CAPTURE_NAME, QUEUE_NAME, STATUS, CAPTURED_SCN, APPLIED_SCN
FROM DBA_CAPTURE;
結果顯示如下:
CAPTURE_NAME QUEUE_NAME STATUS
------------------------------ ------------------------------ --------
CAPTURED_SCN APPLIED_SCN
------------ -----------
CAPTURE_PROD PROD_QUEUE ENABLED
17023672 17023672
如果APPLIED_SCN小於CAPTURED_SCN,則表示在主資料庫一端,要麼LCR沒有被dequeue,要麼Propagation程式尚未傳播到從資料庫一端。
5.3 如何知道Appy程式是否執行正常?
以strmadmin身份,登入從資料庫,執行如下語句:
SQL> SELECT apply_name, apply_captured, status FROM dba_apply;
結果顯示如下:
APPLY_NAME APPLY_ STATUS
---------------------- ------ ----------------
APPLY_H10G YES ENABLED
如果STATUS狀態是ENABLED,表示Apply程式執行正常;
如果STATUS狀態是DISABLED,表示Apply程式處於停止狀態,只需重新啟動即可;
如果STATUS狀態是ABORTED,表示Apply程式非正常停止,查詢相應的ERROR_NUMBER、ERROR_MESSAGE列可以得到詳細的資訊;同時,可以查詢DBA_APPLY_ERROR檢視,瞭解詳細的Apply錯誤資訊。
6 結篇
透過如上的測試可以看出stream的功能還是十分強大的,透過配置Oracle Stream可以更大的提升資料庫的可用性和安全性,如此一個好用且不用花費高昂額外費用的功能還是很值得一用的。
SELECT * FROM SYS.DBA_APPLY_ERROR;
SELECT * FROM SYS.STREAMS$_PROCESS_PARAMS;
SELECT * FROM SYS.STREAMS$_RULES;
SELECT * FROM SYS.STREAMS$_APPLY_PROCESS;
SELECT * FROM SYS.STREAMS$_APPLY_MILESTONE;
SELECT * FROM SYS.STREAMS$_APPLY_PROGRESS;
SELECT * FROM SYS.DBA_APPLY_DML_HANDLERS;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14663377/viewspace-1034861/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDK8新特性之Stream流JDK
- JDK新特性--Stream流JDK
- java8新特性stream流Java
- JDK8新特性(4)—— stream 流JDK
- Java 8 新特性:Stream 流快速入門Java
- JDK8新特性之stream()JDK
- java 8 特性——stream流Java
- Java8 新特性 Stream流操作List集合 (二)Java
- Java8新特性探索之Stream介面Java
- Java8新特性——從Lambda表示式到Stream流Java
- (轉)oracle10g新特性之 flashbackOracle
- JAVA 1.8 新特性 StreamJava
- Java 8 新特性 StreamJava
- oracle10G新特性之ASM的應用OracleASM
- Java8新特性--Stream APIJavaAPI
- JDK 1.8 新特性學習(Stream)JDK
- 深入理解 Redis 新特性:StreamRedis
- Java8新特性系列(Stream)Java
- Java 8新特性(二):Stream APIJavaAPI
- ORACLE10g Stream表級複製配置Oracle
- oracle10G新特性之段顧問的應用Oracle
- Redis5 的新特性 Redis StreamRedis
- JDK 8 新特性之函數語言程式設計 → Stream APIJDK函數程式設計API
- oracle10G新特性之資料泵匯出/匯入Oracle
- Stream流
- oracle10g新特性——物化檢視Oracle
- 求不更學不動之Redis5.0新特性Stream嚐鮮Redis
- ORACLE10g Stream使用者級複製配置Oracle
- Storm概念學習系列之Stream訊息流 和 Stream Grouping 訊息流組ORM
- Java9新特性系列(Stream改進)Java
- Java8 新特性 —— Stream 流式程式設計Java程式設計
- Java8新特性第3章(Stream API)JavaAPI
- Stream 流模組
- Stream流求和
- ZT oracle10g新特性——物化檢視Oracle
- Oracle10g新特性——RMAN(轉來的)Oracle
- 轉載:Oracle10g新特性——審計Oracle
- JAVA基礎之六-Stream(流)簡介Java