Oracle 10gRACOracle 10g Single Configuration

一.基礎環境
==================================================
1.環境說明
--------------------------------------------------
     10gRAC+ASM on Linux5.5(初始安裝在node102上,後續調整成集羣管理的HA模式)
     10gSingle+FS on Linux5.5

--------------------------------------------------
2.安裝前準備
--------------------------------------------------
2.1.Goldengate表空間準備
====================
SQL>create tablespace goldengate datafile '+datadg'  size  200M autoextend on maxsize 1024M;
SQL>select tablespace_name from dba_tablespaces where tablespace_name='GOLDENGATE';

====================
2.2.用戶創建
====================
CREATE USER GOLDENGATE IDENTIFIED BY GOLDENGATE DEFAULT TABLESPACE GOLDENGATE TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO GOLDENGATE;
GRANT ALTER ANY TABLE TO GOLDENGATE;
GRANT ALTER SESSION TO GOLDENGATE;
GRANT CREATE SESSION TO GOLDENGATE;
GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
GRANT SELECT ANY TABLE TO GOLDENGATE;
GRANT RESOURCE TO GOLDENGATE;
GRANT SELECT ANY TRANSACTION TO GOLDENGATE;
--以下權限針對DDL
GRANT CREATE ANY TABLE ,CREATE ANY INDEX,ALTER ANY TABLE TO GOLDENGATE;
GRANT DROP ANY TABLE ,DROP ANY INDEX,DROP ANY VIEW TO GOLDENGATE;

====================
2.3.時間同步
====================
建議使用NTP在RAC節點和目標端進行時間同步

====================
2.4.數據庫歸檔
====================
檢查數據庫是否已運行在歸檔模式:
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
--需要打開強制日誌


設置歸檔目標:
SQL> alter system set log_archive_dest_1='LOCATION=+DGARCH' scope=both sid='*';
System altered.
改數據庫爲歸檔模式:
停止 多餘節點實例:
SQL>shutdown immediate
在一個節點實例修改參數:
SQL>alter system set cluster_database=false scope=spfile sid='*';
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter system set cluster_database=true scope=spfile sid='*';
SQL>shutdown immediate
SQL>startup
啓動其他節點節點實例:
SQL>startup

====================
2.5.歸檔目錄
====================
確保RAC中所有節點都能看到所有的歸檔,確保節點失敗的時候能進行OGG的切換

====================
2.6.配置環境變量
====================
確保爲 Oracle 和 Oracle Goldengate 運行用戶配置動態庫路徑。確保Oracle 數據庫的運行庫<ORACLE_HOME>/lib)添加到操作系統的動態庫環境變量中:LD_LIBRARY_PATH (Solaris, Linux), LIBPATH (AIX), SHLIB_PATH (HPUX)。爲 GoldenGate 運行用戶配置內存限制,將 GoldenGate 運行系統用戶對內存大小(memory)、文件大小(fsize)、DATA、STACK 等參數的值設置爲-1(ulimited),在/etc/security/limits 文件中進行配置。如果需要雙向複製或反向回切,GoldenGate 目標端也同樣設置。

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib

====================
2.7.AIX操作系統特殊要求
====================
Oracle GoldenGate on AIX 5.3 需要 XL C/C++ Runtime v10.1 or later 以及 libpthreadsversion 5.3.0.51 or later,如不符合以上條件需先進行 XLC 和 libpthreads 庫的升級。
注:收集 xlC 和 libpthreads 版本,方法如下:
查看 xlC 版本:
# lslpp -l | grep -i xlc
查看 libpthreads 版本:
#lslpp -h bos.rte.libpthreads

====================
2.8.Windows系統的特殊要求
====================
Oracle GoldenGate on Windows 需安裝 Microsoft Visual C ++ 2005 SP1 RedistributablePackage 注意:Microsoft Visual C++ Runtime 分爲 x86、x64 和 IA64,需要根據不同的操作系統平臺到www.microsoft.com 網站去下載並安裝

====================
2.9.網絡配置
====================
OGG需要確保源端和目標端之間能夠建立TCP連接,一個鏈路需要10個TCP動態端口,建議7839-7849

====================
2.10.操作系統用戶
====================
使用安裝ORACLE軟件的用戶管理OGG

====================
2.11.創建文件系統
====================
爲 GoldenGate 創建文件系統,要求:
Oracle GoldenGate 安裝空間應當全部位於共享陣列;
每個數據庫對應一個 Oracle GoldenGate 安裝,如果是一個數據庫上有多個 Oracle 實例同樣只需要安裝一套 GoldenGate;
在陣列上爲每個 Oracle GoldenGate 安裝劃分單獨空間,所需空間大小可以參照源端數據庫每天產生的歸檔日誌量。例如源數據庫每天產生 150G 歸檔,則爲該數據庫對應的 Oracle GoldenGate 分配 150G 空間;建議爲 Oracle GoldenGate 分配的空間不小於 150G 左右,因爲OGG抽取REDO中的數據大概是1/3,即保留三天的空間,建議保留7天。

====================
2.12.日誌產生
====================
--強制日誌
SELECT force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;

--附加日誌
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

打開補充日誌(打開後在所有節點進行確認):
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

切換日誌:
SQL> alter system archive log current;

複製DDL需要關閉回收站(11g開始可以不用關閉回收站,11.2.0.4開始無法再spfile關閉回收站):
SQL> alter system set recyclebin=off scope=both sid='*';
SQL> purge recyclebin;

====================
2.13.是否有nologging的表
====================
--普通表
SQL> SET PAGESIZE 5000;
SQL> SET HEADING OFF;
SQL> SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' LOGGING;' FROM DBA_TABLES WHERE OWNER IN('SH')  AND LOGGING='NO';

--分區表
SQL> SELECT distinct 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' LOGGING;' FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER IN('SH')  AND LOGGING='NO';

====================
2.14.檢查是否有不支持的數據類型
====================
SQL> SELECT DATA_TYPE FROM DBA_TAB_COLUMNS WHERE OWNER IN('SH') GROUP BY DATA_TYPE;


====================
2.15.是否有壓縮表
====================
--普通表
SQL> SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE NOCOMPRESS UPDATE INDEXES;' FROM DBA_TABLES WHERE OWNER IN('SH')  AND COMPRESSION='ENABLED';

--分區表
SQL> SELECT 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' MOVE PARTITION '||PARTITION_NAME||' NOCOMPRESS UPDATE INDEXES;' FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER IN('SH')  AND COMPRESSION='ENABLED';

--確認索引狀態
SQL> select owner,index_name,status from dba_indexes where owner in('SH') and status!='UNUSABLE';

SQL> select index_owner,index_name,status from dba_ind_partitions where index_owner in('SH') and status!='UNUSABLE';

--------------------------------------------------
3.軟件安裝
--------------------------------------------------
3.1.安裝
====================
在源端和目標端將軟件放到想要安裝的目錄進行解壓即可:
unzip p16441081_112106_ora10g_64bit_Linux-x86-64.zip 1>/dev/zero 2>err.log
tar -xvf fbo_ggs_Linux_x64_ora10g_64bit.tar 1>/dev/zero 2>err.log

--檢查是否缺少Library
ldd ggsci

--檢查安裝是否正常,在絕對路徑下執行
/<安裝目錄>/ggsci

--如果是升級,則必須先安裝基礎版本然後在另外一個文件夾下解壓高級版本然後覆蓋到舊版本文件夾
爲了確保升級的成功最好先對原有版本進行備份,恢復的時候不恢復./dirdat下面的文件。隊列文件對於各個版本是通用的

====================
3.2.創建OGG運行時目錄
====================
--源端和目標端
GGSCI (node100) 2> create subdirs

====================
3.3.配置MGR進程(兩端)
====================
GGSCI>edit params mgr
port 7839
DYNAMICPORTLIST 7840-7850
--AUTOSTART EXTRACT *
--AUTORESTART EXTRACT *
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 1
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

GGSCI>start mgr

--------------------------------------------------
4.Golddengate進程配置
--------------------------------------------------
4.1配置ASM連接串
====================
對於 Oracle 10gR2 10.2.0.5 之前,或 Oracle 11gR2 11.2.0.2 之前的版本,如果 Redo 文件存放在ASM 中,需要配置 ASM 實例的 TNS 別名:
ASMINST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.201)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =+ASM)
      (UR =A)
    )
  )

--參數說明
(UR=A)是因爲在監聽中ASM的實例是BLOCKED,所以添加此參數

====================
4.2.添加表級附加日誌
====================
GGSCI (node102) 3> dblogin userid goldengate, password goldengate
GGSCI (node102) 4> add trandata sh.*
--確認是否都添加了
GGSCI (node102) 4> info trandata SH.*

--如果有沒有添加成功的可以手工進行添加
GGSCI (node102) 4> add trandata OE.PROMOTIONS

--不支持物化視圖
--不支持帶mapping table的IOT表

====================
4.3.添加extract進程
====================
add extract extshr, tranlog, begin now, threads 2
add exttrail ./dirdat/sr, extract extshr, megabytes 200
配置參數
GGSCI>edit params extshr
EXTRACT extshr
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=ggsp2)
TRANLOGOPTIONS DBLOGREADER
userid goldengate,password goldengate
REPORTCOUNT EVERY 1 MINUTES, RATE
numfiles 5000
DISCARDFILE ./dirrpt/extshr.dsc,APPEND,MEGABYTES 10
DISCARDROLLOVER AT 3:00
exttrail ./dirdat/sr,megabytes 100
dynamicresolution
--tranlogoptions rawdeviceoffset 0
TRANLOGOPTIONS EXCLUDEUSER goldengate
TRANLOGOPTIONS convertucs2clobs
tableexclude SH.SALES_TRANSACTIONS_EXT;
TABLE SH.*;

--如果是RAC到單機,需要在目標端刪掉多餘thread的redo
SQL> alter database disable thread 2;
SQL> alter database drop logfile group <x>

--啓動進程
GGSCI (node102) 19> start extshr

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) --設置字符集,和數據庫字符集一致(這也是處理中文的辦法)
setenv (ORACLE_SID=ggsp1)     --設置實例名,如果一個主機上有多個實例的話
--TRANLOGOPTIONS ASMUSER sys@asminst, asmpassword oracle --11.2.0.2/10.2.0.5之前版本,REDO放在ASM
--TRANLOGOPTIONS DBLOGREADER --11.2.0.2/10.2.0.5之後版本
--tranlogoptions rawdeviceoffset 0 --使用AIX且redo在裸設備
--TRANLOGOPTIONS EXCLUDEUSER goldengate --表示不抓取goldengate用戶的日誌,適用於雙向複製
--tableexclude schema.table_name;排除不復制的表,放在table的前面

====================
4.4.添加datapump進程
====================
add extract dpshr, exttrailsource ./dirdat/sr
add rmttrail ./dirdat/sr,EXTRACT dpshr,MEGABYTES 200

--exttrailsource要和extract進程的文件對應
--rmttrail是放在遠端的

GGSCI> edit params dpshr
extract dpshr
dynamicresolution
passthru
rmthost 192.168.100.100, mgrport 7839, compress
rmttrail ./dirdat/sr
numfiles 5000
TABLE SH.*;

--啓動進程
GGSCI (node102) 35> start dpshr

--rmthost 遠端主機IP, mgrport 遠端MGR進程監聽的端口, compress
--rmttrail應該和datapump進程添加的一致
--多次運行info dpshr,確認RBA在不斷變化


--------------------------------------------------
5.目標端初始化
--------------------------------------------------
5.1.源端備份
====================
RMAN> run
{allocate channel c1 type disk;
allocate channel c2 type disk;
backup as backupset database format '/u02/rmanbk/full_%d_%T_%s_%p';
sql 'alter system archive log current';
backup as backupset archivelog all format '/u02/rmanbk/arch_%d_%T_%s_%p';
backup as backupset current controlfile format '/u02/rmanbk/ctl_%d_%T_%s_%p';
}

SQL> create pfile='/u02/rmanbk/initggsp.ora' from spfile;
[oracle@node101 rmanbk]$ scp  ./* oracle@node100:/u02/rmanbk/

====================
5.2.獲取源端SCN(使用導入導出應該在)
====================
SQL> spool current_scn.txt
SQL> select to_char(current_scn) from v$database;

TO_CHAR(CURRENT_SCN)
----------------------------------------
446350

SQL> spool off;

--(9i)select to_char(dbms_flashback.get_system_change_number()) from dual;

====================
5.2.目標端恢復
====================
在目標端將參數文件調整過後啓動實例到nomount階段
SQL> startup nomount pfile='/u02/rmanbk/initggsp.ora';
RMAN> restore controlfile from '/u02/rmanbk/ctl_GGSPLX_20140521_8_1';

調整參數文件
job_queue_processes=0
control_files='/u02/GGSPLX/controlfile/o1_mf_9qsdbs8w_.ctl','/u02/GGSPLX/controlfile/o1_mf_9qsdbxw5_.ctl','/u02/GGSPLX/controlfile/o1_mf_9qsdc0gv_.ctl'

SQL> startup mount pfile='/u02/rmanbk/initggsp.ora';
RMAN> run
{set until scn 446350;
allocate channel c1 type disk;
allocate channel c2 type disk;
restore database;
recover database;
}

--使用OMF可以直接進行restore
--如果沒使用OMF需要在恢復腳本里面指定set newname for datafile 1 to ''
SQL> show parameter job;
SQL> alter system set job_queue_processes=0 scope=both sid='*';
SQL> create spfile from pfile='/u02/rmanbk/initggsp.ora';
SQL> create pfile from spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database open resetlogs;

--------------------------------------------------
6.目標配置
--------------------------------------------------
====================
6.1.禁用觸發器和外鍵約束,JOB,scheduler
====================
SQL> alter system set job_queue_processes=0 scope=both sid='*';
SQL> select 'alter table "'||owner||'"."'||table_name||'" disable constraint '||constraint_name||';' from dba_constraints where constraint_type in ('R') and owner in('SH') and status='ENABLED' order by status,owner;

SQL> select 'alter trigger "'||owner||'"."'||trigger_name||'" disable;' from dba_triggers where owner in('SH') and status='ENABLED';

SQL> select 'execute dbms_scheduler.disable('''||owner||'.'||JOB_NAME||''');' from dba_scheduler_jobs where enabled='TRUE' and owner in('SH');

SQL>最好drop掉job和db link

====================
6.2.重建用戶
====================
如果使用導入導出初始化則應該先建表空間再創建用戶
如果目標端數據庫是用 RMAN 恢復建立的,需要先 DROP 原來的 goldengate 用戶:
$sqlplus “/as sysdba”
SQL>drop user goldengate cascade;
CREATE USER GOLDENGATE IDENTIFIED BY GOLDENGATE DEFAULT TABLESPACE
GOLDENGATE TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO GOLDENGATE;
GRANT ALTER ANY TABLE TO GOLDENGATE;
GRANT ALTER SESSION TO GOLDENGATE;
GRANT CREATE SESSION TO GOLDENGATE;
GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
GRANT SELECT ANY TABLE TO GOLDENGATE;
GRANT RESOURCE TO GOLDENGATE;
GRANT INSERT ANY TABLE TO GOLDENGATE;
GRANT UPDATE ANY TABLE TO GOLDENGATE;
GRANT DELETE ANY TABLE TO GOLDENGATE;
GRANT CREATE ANY INDEX TO GOLDENGATE;
GRANT SELECT ANY TRANSACTION TO GOLDENGATE;
--以下權限針對DDL
GRANT CREATE ANY TABLE ,CREATE ANY INDEX,ALTER ANY TABLE TO GOLDENGATE;
GRANT DROP ANY TABLE ,DROP ANY INDEX,DROP ANY VIEW TO GOLDENGATE;

====================
6.3.目標端創建replicat進程
====================
GGSCI>dblogin userid goldengate,password goldengate
GGSCI>add checkpointtable goldengate.rep_sh_ckpt
強列建議爲每個 Replicat 進程創建 checkpointtable。
GGSCI>add replicat repshr,exttrail ./dirdat/sr,checkpointtable goldengate.rep_sh_ckpt
注:
Exttrail 參數要和源端 DataPump 進程的 rmttrail 參數指向一致;
Checkpointtable 參數引用的表必須已用 add checkpointtable 命令創建;
GGSCI>edit param repshr
REPLICAT repshr
SETENV (ORACLE_SID=ggsp0)
SETENV (NLS_LANG = "American_America.ZHS16GBK")
USERID goldengate,PASSWORD goldengate
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
numfiles 5000
--HANDLECOLLISIONS
assumetargetdefs
DISCARDFILE ./dirrpt/repshr.dsc, APPEND, MEGABYTES 1000
ALLOWNOOPUPDATES
map sh.*, target sh.*;
注:
NLS_LANG 變量要和數據庫語言環境一致;
確保需要複製的表都出現在 map 參數中;

--啓動複製進程,必須確保SCN是從恢復點之後的SCN進行復制
GGSCI> start replicat repshr, aftercsn 446350

--------------------------------------------------
7.DDL/SEQUENCE配置
--------------------------------------------------
--運行 GoldenGate DDL 支持配置腳本,順序必須一致
SQL>@marker_setup.sql
--上面腳本會要求輸入schema

SQL>@ddl_setup.sql
--上面腳本不能放在ocfs中執行


SQL> @role_setup.sql
--授權,並且要授給 GoldenGate 用戶操作 DDL 複製相關對象的權限
SQL> GRANT GGS_GGSUSER_ROLE TO GOLDENGATE;
--啓用 DDL 捕獲觸發器
SQL> @ddl_enable

--在extract進程參數添加DDL相關參數
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT

--在rep進程添加參數
DDL INCLUDE MAPPED
DDLOPTIONS REPORT

--配置sequence支持
源端目標端均需執行:
SQL>@sequence.sql

--------------------------------------------------
8.雙向複製
--------------------------------------------------
8.1.配置雙向複製前提
====================
1).配置雙向複製前,原目標端沒有進行過相關數據操作,否則導致數據不同步;

====================
8.2.配置主要步驟
====================
1).爲新源端ogg用戶進行授權;
2).確認是否打開歸檔(一般歸檔和附加日誌都隨初始化的時候同步到新源端);
3).確認壓縮表/支持的數據類型等
4).創建新源端的進程
5).創建新目標端進程
6).禁用新目標端的約束,觸發器,job,scheduler
7).在新目標端給OGG授予對應權限
8).創建新目標端rep進程並直接start(不用指定SCN)
9).在新目標端配置DDL支持
     雙向複製的時候如果配置了自動添加

====================
8.3.配置注意事項
====================
1).單向配置爲:RAC到單機,配置雙向複製的時候需要drop掉新源端多餘thread的redo,報錯信息如下
     2014-05-21 22:56:12  ERROR   OGG-00446  Oracle GoldenGate Capture for Oracle, extshs.prm:  The number of Oracle redo threads (2) is not the same as the number of checkpoint threads (1). EXTRACT groups on RAC systems should be created with the THREADS parameter (e.g., ADD EXT <group name>, TRANLOG, THREADS 2, BEGIN...).

2).配置雙向複製的DDL需要配置
catpture:
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
DDLOPTIONS REPORT
DDLOPTIONS GETREPLICATES, GETAPPLOPS

replicat:
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
DDLOPTIONS UPDATEMETADATA
         

--------------------------------------------------
9.問題處理
--------------------------------------------------
RAC到單機可能需要drop掉多餘thread的redo,報錯信息如下():
2014-05-21 22:56:12  ERROR   OGG-00446  Oracle GoldenGate Capture for Oracle, extshs.prm:  The number of Oracle redo threads (2) is not the same as the number of checkpoint threads (1). EXTRACT groups on RAC systems should be created with the THREADS parameter (e.g., ADD EXT <group name>, TRANLOG, THREADS 2, BEGIN...).





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章