国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

GoldenGate從oracle遷移數據到mysql

2024-07-24 12:31:42
字體:
來源:轉載
供稿:網友
        GoldenGate從oracle遷移數據到mysql:
1 軟件簡介
      安裝時應該選擇最為穩定的安裝版本,現在官方發布的版本主要為:
 
        Oracle GoldenGate 11.2.1.0.1
 
       對應不同的數據庫和版本,有不同的安裝介質。下面是根據現網情況使用的兩個安裝介質:
 
       ogg112101_fbo_ggs_Linux_x64_ora10g_64bit.zip
 
       ggs_Linux_x64_MySQL_64bit.tar
 
        Oracle Golden Gate軟件是一種基于日志的結構化數據復制備份軟件,它通過解析源數據庫在線日志或歸檔日志獲得數據的增量變化,再將這些變化應用到目標數據庫,從而實現源數據庫與目標數據庫同步。Oracle Golden Gate可以在異構的IT基礎結構(包括幾乎所有常用操作系統平臺和數據庫平臺)之間實現大量數據亞秒一級的實時復制,從而在可以在應急系統、在線報表、實時數據倉庫供應、交易跟蹤、數據同步、集中/分發、容災、數據庫升級和移植、雙業務中心等多個場景下應用。同時,Oracle Golden Gate可以實現一對一、廣播(一對多)、聚合(多對一)、雙向、點對點、級聯等多種靈活的拓撲結構。
 
2  整體架構
和傳統的邏輯復制一樣,Oracle GoldenGate實現原理是通過抽取源端的redo log或者archive log,然后通過TCP/IP投遞到目標端,最后解析還原應用到目標端,使目標端實現同源端數據同步。以下是OracleGoldenGate的技術架構
 
Manager進程
 
Manager進程是GoldenGate的控制進程,運行在源端和目標端上。它主要作用有以下幾個方面:啟動、監控、重啟Goldengate的其他進程,報告錯誤及事件,分配數據存儲空間,發布閥值報告等。
 
Extract進程
  
Extract運行在數據庫源端,負責從源端數據表或者日志中捕獲數據。
  
Pump進程
  
pump進程運行在數據庫源端。其作用是如果源端使用了本地的trail文件,那么pump進程就會把trail以數據塊的形式通過TCP/IP協議發送到目標端,這通常也是推薦的方式。pump進程本質是extract進程的一種特殊形式,如果不使用trails文件,那么就是extract進程在抽取完數據以后,直接投遞到目標端。
  
Trail文件
  
       為了更有效、更安全的把數據庫事務信息從源端投遞到目標端。GoldenGate引進trail文件的概念。前面提到extract抽取完數據以后Goldengate會將抽取的事務信息轉化為一種GoldenGate專有格式的文件。然后pump負責把源端的trail文件投遞到目標端,所以源、目標兩端都會存在這種文件。trail文件存在的目的旨在防止單點故障,將事務信息持久化,并且使用checkpoint機制來記錄其讀寫位置,如果故障發生,則數據可以根據checkpoint記錄的位置來重傳。
  
Replicat進程
  
       Replicat進程,通常我們也把它叫做應用進程。運行在目標端,是數據傳遞的最后一站,負責讀取目標端trail文件中的內容,并將其解析為DML或DDL語句,然后應用到目標數據庫中。
 
GGSCI
  
       GGSCI是GoldenGate Software Command Interface 的縮寫,它提供了十分豐富的命令來對Goldengate進行各種操作,如創建、修改、監控GoldenGate進程等等
 
靈活的拓撲結構:
 
GoldenGate從oracle遷移數據到mysql
 
2.1   GoldenGate支持列表
Databases
 
OS and Platforms
 
Capture:
 
Windows 2000,2003,xp
 
Oracle
 
Linux
 
DB2 UDB
 
Sun Slolaris
 
Microsoft SQL Server
 
HP NonStop
 
Sybase ASE
 
HP Ux
 
Teradata
 
HP TRU64
 
Ingres
 
IBM AIX
 
Enscribe
 
IBM z/OS
 
SQL/MP
   
SQL/MX
  
Delivery:
  
All listed above
  
Mysql,hp neoview,Netezza
  
And ODBC compatible databases
  
3       GoldenGate軟件安裝
3.1 組和用戶創建
源端是oracle生產數據庫,已經存在oracle和dba,復用該用戶和組。
 
目標端是mysql,已經存在mysql和dba,復用該用戶和組。
 
3.2 GoldenGate安裝目錄檢查
安裝Oracle GoldenGate軟件前,需要事先確認安裝目錄屬主權限正確,且所在文件系統有足夠的空間存放Oracle GoldenGate軟件并能支撐日常運維使用。對于存放dirdat數據目錄,至少需要100GB以上的空間。對于源庫是oracle rac模式,必須設置ogghome的目錄的存儲能讓rac兩臺主機識別,只是mount在一個任務較輕的節點上,若是該節點出現故障,能及時掛載到另外一個節點上,增加高可用性。
 
檢查安裝目錄所在文件系統空間信息,通過下述命令實現:
 
df -g /home/ogghome
 
確認安裝目錄屬主權限信息,通過下述命令實現:
 
ls –ld /home/ogghome
 
3.3 解壓安裝文件
Oracle GoldenGate軟件通過解壓縮方式實現安裝,
 
解壓縮GoldenGate安裝文件,通過下述命令實現:
 
unzip ggs_*.zip
 
tar -xvf  ggs_*.tar
 
3.4 GoldenGate軟件啟動測試
Oracle GoldenGate軟件通過ggsci命令啟動交互界面,當ggsci啟動成功則表名安裝過程無誤。啟動ggsci前務必進入Oracle GoldenGate軟件的安裝目錄。
 
啟動Oracle GoldenGate的ggsci,通過下述命令實現:
 
cd /home/oracle/ggs/goldengate
 
./ggsci
 
Oracle數據庫的賬號必須設置LD_LIBRARY_PATH環境變量,否則會報錯,
 
LD_LIBRARY_PATH=/oracle/product/10.2/db/lib
 
3.5 、創建GoldenGate軟件子目錄
進入安裝路徑,創建相關目錄(源端和目標端都執行),源端使用oracle用戶,目標端使用mysql用戶:
 
cd /home/ogghome
 
./ggsci
 
GGSCI> create subdirs
 
下面是日志:
 
Creating subdirectories under current directory /home/ogghome
 
Parameter files                /home/ogghome/dirprm: already exists
 
Report files                   /home/ogghome/dirrpt: created
 
Checkpoint files               /home/ogghome/dirchk: created
 
Process status files           /home/ogghome/dirpcs: created
 
SQL script files               /home/ogghome/dirsql: created
 
Database definitions files     /home/ogghome/dirdef: created
 
Extract data files             /home/ogghome/dirdat: created
 
Temporary files                /home/ogghome/dirtmp: created
 
Stdout files                   /home/ogghome/dirout: created
 
4       GoldenGate部署
4.1 初始化源端數據庫
4.1.1             開啟歸檔模式
GoldenGate是基于oracle日志變化的捕獲,所以為了完整的捕獲到oracle數據庫的變化,有必要將歸檔模式開啟。
 
SQL>      alter system set log_archive_dest_1='location=/arch' scope=both;
 
  SQL>  shutdown immediate
 
  SQL>  startup mount
 
  SQL>  alter database archivelog
 
  SQL>  alter database open
 
  SQL>  archive log list
 
注意,由于上面命令涉及停止數據庫應用,應結合業務實際情況進行操作。
 
4.1.2             開啟附加日志
在oracle中我們可以通過rowid來定位某條記錄,但是目標端的數據庫和源端數據庫的數據庫可能完全不一樣,所以無法通過rowid來確定源端數據庫的邏輯變化,這時附件日志supplemental log便登上了表演的舞臺。數據庫在開啟附加日志功能后,對于源端的修改操作,oracle會同時追加能夠唯一標示記錄的列到redo log。這樣目標端數據庫就可以知道源端發生了哪些具體的變化。
 
   SQL>       alter database add supplemental log data;
 
   SQL>       alter system switch logfile;
 
   SQL>       select supplemental_log_data_min from v$database;
 
4.1.3             開啟強制日志模式
SQL>alter database force logging;
 
 SQL>SELECT FORCE_LOGGING FROM V$DATABASE;
 
4.1.4             goldengate創建用戶并授權
源端oracle數據庫創建賬號:
 
create tablespace data_goldengate datafile '+DG_DATA1' size 10240m autoextend on;
 
create user goldengate identified by password default tablespace data_goldengate temporary tablespace temp;
 
賦予goldengate相關權限(想簡單的話,可以賦予DBA權限,若是涉及安全問題,dba權限不能隨便賦予)
 
grant CONNECT,RESOURCE to goldengate;
 
grant CREATE SESSION,ALTER SESSION to goldengate;
 
grant SELECT ANY DICTIONARY,SELECT ANY TABLE to goldengate;
 
grant CREATE TABLE,ALTER ANY TABLE to goldengate;
 
grant unlimited tablespace to goldengate;
 
目標端mysql創建賬號,賦予dba權限:
 
grant ALL PRIVILEGES on *.* to goldengate@'%';
 
grant ALL PRIVILEGES on *.* to goldengate@'localhost';
 
update mysql.user set password=password('password') where user='goldengate';
 
4.1.5             對需要同步的表確認是否開啟表級附加日志
./ggsci
 
GGSCI (localhost.localdomain) 1> dblogin userid goldengate password password
 
Successfully logged into database.
 
GGSCI (localhost.localdomain) 2> info trandata xianyezhao.CALENDAR_DETAIL
 
Logging of supplemental redo log data is disabled for table XIANYEZHAO.CALENDAR_DETAIL.
 
GGSCI (localhost.localdomain) 3> add trandata xianyezhao.CALENDAR_DETAIL
 
Logging of supplemental redo data enabled for table XIANYEZHAO.CALENDAR_DETAIL.
 
GGSCI (localhost.localdomain) 4> info trandata  XIANYEZHAO.CALENDAR_DETAIL
 
Logging of supplemental redo log data is enabled for table XIANYEZHAO.CALENDAR_DETAIL.
 
Columns supplementally logged for table XIANYEZHAO.CALENDAR_DETAIL: SEQNO.
 
4.2 配置ASM訪問方式
由于oracle redo 日志文件在ASM存儲上,goldengate軟件需要訪問ASM,
 
配置asm實例的tns連接字符串,由于監聽狀態是BLOCKED,必須添加(UR=A)才能通過ogg遠程登錄asm實例。下面是官方詳細說明:
 
ASM instances appear with a blocked status from the 'lsnrctl services'command (see below). To remotely access a 'blocked service' you need toadd (UR=A) to the tns connect string (plus you will need a password filefor the asm instance).
 
Tnsnames.ora entry:----
 
下面是監聽狀態,使用lsnrctl status查看:
 
Service "+ASM" has 1 instance(s).
 
  Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
 
下面是具體的tns連接字符串:
 
ASM =
 
 (DESCRIPTION =
 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.219.6)(PORT = 1521))
 
    (CONNECT_DATA =
 
      (SERVER = DEDICATED)
 
      (SERVICE_NAME = +ASM)
 
      (INSTANCE_NAME = +ASM2)
 
      (UR=A)
 
    )
 
  )
 
4.3 配置NFS文件系統
由于歸檔是使用文件系統,需要使用nfs文件模式,把另外一個節點的歸檔掛載到本地。
 
a.開啟nfs服務:
 
service nfs start
 
查看nfs狀態:
 
service nfs status
 
b.開啟nfs權限:
 
編輯權限列表:
 
vi /etc/exports
 
/archivelog1    *(rw)
 
更新權限:
 
exportfs –a
 
c.創建/archivelog1,更改權限為oracle和dba,
 
chown oracle:dba /archivelog1
 
使用root用戶mount上:
 
mount 192.168.219.3:/archivelog1 /archivelog1
 
4.4 在源端和目標端配置MGR
ggsci>     EDIT  PARAMS  MGR
 
PORT   7809
 
PURGEOLDEXTRACTS  ./dirdat,USECHECKPOINTS
 
ggsci>     START   MGR
 
ggsci>    INFO      MGR
 
4.5 創建Extract: ext_cal
4.5.1             增加extract
add extract ext_cal, tranlog, begin now, THREADS 2
 
EXTRACT added.
 
4.5.2             設定exttrail
add exttrail ./dirdat/ca, extract ext_cal, megabytes 100
 
EXTTRAIL added.
 
4.5.3             配置extract
下面******替換成密碼:
 
edit params ext_cal
 
/********************************************************************/
 
EXTRACT ext_cal                                                          
 
SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")                                                    
 
SETENV (ORACLE_SID="g139bak2")                                                 
 
userid goldengate, password password
 
TRANLOGOPTIONS ASMUSER sys@asm,ASMPASSWORD ******
 
EXTTRAIL ./dirdat/ca    
 
TRANLOGOPTIONS LOGRETENTION DISABLED
 
TRANLOGOPTIONS BUFSIZE 2048000
 
tranlogoptions altarchivedlogformat threadid 1 g139bak_%S_%T_%R.log
 
tranlogoptions altarchivedlogformat threadid 2 g139bak_%S_%T_%R.log
 
tranlogoptions altarchivelogdest instance g139bak1 /archivelog1/g139bak_archivelog, altarchivelogdest instance g139bak2 /archivelog2/g139bak_archivelog
 
--DDL INCLUDE mapped
 
--DDLOPTIONS ADDTRANDATA
 
DISCARDFILE ./dirrpt/ext_cal.dsc,APPEND,MEGABYTES 1000
 
DISCARDROLLOVER AT 6:00
 
REPORTROLLOVER AT 6:00
 
REPORTCOUNT EVERY 1 HOURS,RATE
 
TRANLOGOPTIONS ALTARCHIVELOGDEST /archivelog2
 
FETCHOPTIONS MISSINGROW ABEND
 
STATOPTIONS REPORTFETCH
 
WARNLONGTRANS 1H,CHECKINTERVAL 10m
 
DYNAMICRESOLUTION        
 
TABLE XIANYEZHAO.CALENDAR_DETAIL;
 
TABLE XIANYEZHAO.CALENDAR_INFO;
 
/********************************************************************/
 
下面是查看內容:
 
GGSCI (gb139bak02) 5> view report ext_cal
 
4.6 創建投送進程: dp_cal
4.6.1             增加extract
add extract dp_cal, exttrailsource ./dirdat/ca
 
4.6.2             設定extract投遞rmttrail
add rmttrail ./dirdat/ca, extract dp_cal
 
4.6.3             配置extract
edit params dp_cal
 
/********************************************************************/
 
EXTRACT dp_cal
 
passthru
 
DYNAMICRESOLUTION
 
RMTHOST 192.168.219.35, MGRPORT 7809, COMPRESS
 
RMTTRAIL ./dirdat/ca
 
TABLE XIANYEZHAO.CALENDAR_DETAIL;
 
TABLE XIANYEZHAO.CALENDAR_INFO;
 
/********************************************************************/
 
由于沒有配置目標端的mgr進程,7809沒有打開,網絡報錯,導致進程掛掉。
 
GGSCI (localhost.localdomain) 48> view report dp_cal
 
GGSCI (gb139bak02) 65> view report dp_cal
 
4.7 創建定義文件
在源端編輯defgen文件
 
su - oracle
 
cd ./dirprm
 
$ vi cal.prm
 
DEFSFILE /home/ogghome/dirdef/cal.def
 
USERID goldengate PASSWORD password
 
TABLE XIANYEZHAO.CALENDAR_DETAIL;
 
TABLE XIANYEZHAO.CALENDAR_INFO;
 
通過執行defgen命令生成定義文件
 
/home/ogghome/defgen PARAMFILE /home/ogghome/dirprm/cal.prm
 
***********************************************************************
 
        Oracle GoldenGate Table Definition Generator for Oracle
 
      Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230
 
   Linux, x64, 64bit (optimized), Oracle 10g on Apr 23 2012 05:09:39
 
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
 
                    Starting at 2014-06-09 15:24:08
 
***********************************************************************
 
Operating System Version:
 
Linux
 
Version #1 SMP Thu Sep 5 21:21:44 EDT 2013, Release 2.6.18-371.el5
 
Node: gb139bak02
 
Machine: x86_64
 
                         soft limit   hard limit
 
Address Space Size   :    unlimited    unlimited
 
Heap Size            :    unlimited    unlimited
 
File Size            :    unlimited    unlimited
 
CPU Time             :    unlimited    unlimited
 
Process id: 2014
 
***********************************************************************
 
**            Running with the following parameters                  **
 
***********************************************************************
 
DEFSFILE /home/ogghome/dirdef/cal.def
 
USERID goldengate PASSWORD ********
 
TABLE XIANYEZHAO.CALENDAR_DETAIL;
 
Retrieving definition for XIANYEZHAO.CALENDAR_DETAIL
 
TABLE XIANYEZHAO.CALENDAR_INFO;
 
Retrieving definition for XIANYEZHAO.CALENDAR_INFO
 
Definitions generated for 2 tables in /home/ogghome/dirdef/cal.def
 
把生成的def文件傳輸到mysql端
 
[oracle@localhost dirdef]$ sftp mysql@192.168.61.131
 
Connecting to 192.168.61.131...
 
mysql@192.168.61.131's password:
 
sftp> cd /home/ogghome/dirdef
 
sftp> !ls
 
sftp> put cal.def
 
Uploading cal.def to /home/ogghome/dirdef/cal.def
 
cal.def                                                                                         100% 1001     1.0KB/s   00:00
 
修改mysql端定義文件的權限
 
chown mysql:dba /home/ogghome/dirdef/cal.def
 
chmod 755 /home/ogghome/dirdef/cal.def
 
4.8 初始化數據
4.8.1             Oracle到oracle導出方式
1、查看系統改變號:
 
col current_scn for 999999999999999999999999999999
 
select current_scn from v$database;
 
--1138506
 
2、導出導入數據:
 
set linesize 133
 
col directory_path format a50
 
select * from dba_directories;
 
SYS                            DATA_PUMP_DIR                  /opt/oracle/app/admin/test/dpdump/
 
expdp /'/ as sysdba /' DIRECTORY=DATA_PUMP_DIR DUMPFILE=t3.dmp LOGFILE=t3.log TABLES=test.t3 FLASHBACK_SCN=1138506
 
impdp /'/ as sysdba /' DIRECTORY=DATA_PUMP_DIR DUMPFILE=t3.dmp LOGFILE=t3_imp.log TABLES=test.t3 REMAP_TABLESPACE=DATA_TEST:DATA_TEST
 
--REMAP_SCHEMA=TEST:TEST
 
3、啟動應用進程的時候,需要指定aftersn號,下面是具體例子:
 
用SCN 啟動Replicat
 
start rep_cal, aftercsn 1138506
 
4.8.2             Oracle到mysql方式
使用goldengatedirect load的方式:
 
源端:
 
ADD EXTRACT einixyz, SOURCEISTABLE
 
EXTRACT einixyz
 
userid goldengate, password password
 
RMTHOST 192.168.219.35, MGRPORT 7809, COMPRESS
 
RMTTASK REPLICAT, GROUP RINIXYZ
 
TABLE XIANYEZHAO.T_INI;
 
創建定義文件
 
在源端編輯defgen文件
 
su - oracle
 
cd ./dirprm
 
$ vi cal_xyz.prm
 
DEFSFILE /home/ogghome/dirdef/cal_xyz.def
 
USERID goldengate PASSWORD password
 
TABLE XIANYEZHAO.T_INI;
 
通過執行defgen命令生成定義文件
 
/home/ogghome/defgen PARAMFILE /home/ogghome/dirprm/cal_xyz.prm
 
sftp上傳到目標端服務器/home/ogghome/dirdef/目錄下。
 
目標端:
ADD REPLICAT rinixyz, SPECIALRUN
 
 
replicat RINIXYZ
 
sourcedefs /home/ogghome/dirdef/cal_xyz.def
 
SETENV (MYSQL_UNIX_PORT=/mysql/dbdata/mysql.sock)
 
sourcedb cal@localhost userid goldengate, password password
 
reperror default, discard
 
discardfile ./dirrpt/ext_in.dsc,APPEND,MEGABYTES 1000
 
MAP XIANYEZHAO.T_INI , TARGET CAL.T_INI;
 
啟動數據初始化,只是需要在源端啟動抽取進程即可:
 
start einixyz
 
4.9 目標端創建Replicat
4.9.1             手工創建數據庫和表語句
創建數據庫:
 
create database cal;
 
創建表,需要把oracle格式轉化為mysql格式,下面是部分內容:
 
1.number需要轉化成DECIMAL
 
2.varchar2需要轉化成varchar
 
3.date需要轉換成datetime
 
4.mysql不支持NUMBER(38,0)轉換成DECIMAL(38,0),因此,需要把*轉化成oracle最大的數值,38位長,DECIMAL(38,0)。
 
5.由于mysql分區字段必須是int類型,下面HASH (UIN)不能進行hash分區。
 
6.mysql索引沒有并發概念,去除parallel選項。
 
CREATE TABLE CALENDAR_DETAIL
 
   ( SEQNO DECIMAL NOT NULL,
 
       DETAILSEQNO DECIMAL,
 
       LABELID DECIMAL,
 
       LABELTYPE DECIMAL(2,0),
 
       MESSTYPE DECIMAL(2,0),
 
       UIN VARCHAR(32),
 
       SERVICEID DECIMAL(8,0),
 
       SPSID VARCHAR(32),
 
       RECTARGET VARCHAR(1024),
 
       STARTSENDTIME DATETIME,
 
       SENDMSG VARCHAR(2000),
 
       CREATETIME DATETIME,
 
       MODIFYTIME DATETIME,
 
       TYPE DECIMAL(38,0) DEFAULT 0
 
   );
 
CREATE INDEX CALENDAR_DETAIL_IDX3_NEW ON CALENDAR_DETAIL (DETAILSEQNO);
 
CREATE UNIQUE INDEX PK_CALENDAR_DETAIL ON CALENDAR_DETAIL (SEQNO);
 
CREATE INDEX CALENDAR_DETAIL_IDX1_NEW ON CALENDAR_DETAIL (STARTSENDTIME);
 
CREATE INDEX CALENDAR_DETAIL_IDX2_NEW ON CALENDAR_DETAIL (UIN);
 
ALTER TABLE CALENDAR_DETAIL ADD CONSTRAINT PK_CALENDAR_DETAIL PRIMARY KEY(SEQNO);
 
CREATE TABLE CALENDAR_INFO
 
   ( SEQNO DECIMAL NOT NULL,
 
       UIN VARCHAR(32),
 
       GID VARCHAR(50),
 
       CREATORUIN VARCHAR(32),
 
       SERVICEID DECIMAL(10,0),
 
       SPSID VARCHAR(32),
 
       TITLE VARCHAR(600),
 
       SITE VARCHAR(200),
 
       ISATTACH DECIMAL(2,0),
 
       CONTENT VARCHAR(1500),
 
       STARTDATE DATETIME,
 
       ENDDATE DATETIME,
 
       STARTTIME DECIMAL(5,0),
 
       ENDTIME DECIMAL(5,0),
 
       STATUS DECIMAL(2,0),
 
       DATEDESCRIPT VARCHAR(128),
 
       ENABLE DECIMAL(2,0),
 
       AUTHSTATUS DECIMAL(2,0),
 
       LABELID DECIMAL,
 
       LABELTYPE DECIMAL(2,0),
 
       SPECIALAPPID DECIMAL,
 
       RECMYSMS DECIMAL(2,0),
 
       RECMYEMAIL DECIMAL(2,0),
 
       RECMOBILE VARCHAR(1024),
 
       RECEMAIL VARCHAR(1024),
 
       CREATETIME DATETIME,
 
       MODIFYTIME DATETIME,
 
       VERSION DECIMAL(8,0),
 
       EXPEND VARCHAR(50),
 
       COMEFROM DECIMAL(5,0),
 
       SPECIALTYPE DECIMAL(2,0) DEFAULT 0
 
   );
 
  
 
CREATE INDEX CALENDAR_INFO_IDX6_NEW ON CALENDAR_INFO (SPECIALAPPID);
 
CREATE INDEX CALENDAR_INFO_IDX1_NEW ON CALENDAR_INFO (UIN);
 
CREATE INDEX CALENDAR_INFO_IDX7_NEW ON CALENDAR_INFO (LABELID);
 
CREATE INDEX CALENDAR_INFO_IDX4_NEW ON CALENDAR_INFO (STARTTIME);
 
CREATE INDEX CALENDAR_INFO_IDX8_NEW ON CALENDAR_INFO (GID);
 
CREATE INDEX SPECIALTYPE_INDEX ON CALENDAR_INFO (SPECIALTYPE);
 
CREATE UNIQUE INDEX PK_CALENDAR_INFO ON CALENDAR_INFO (SEQNO);
 
CREATE INDEX CALENDAR_INFO_IDX5_NEW ON CALENDAR_INFO (ENDTIME);
 
CREATE INDEX CALENDAR_INFO_IDX3_NEW ON CALENDAR_INFO (ENDDATE);
 
CREATE INDEX CALENDAR_INFO_IDX2_NEW ON CALENDAR_INFO (STARTDATE);
 
ALTER TABLE CALENDAR_INFO ADD CONSTRAINT PK_CALENDAR_INFO PRIMARY KEY (SEQNO);
 
4.9.2             在目標端配置replicat進程
ggsci>     EDIT  PARAMS  ./GLOBALS
 
CHECKPOINTTABLE         goldengate.ggschkpt
 
ggsci>   exit
 
ggsci>   dblogin sourcedb cal@192.168.219.35:3306,userid goldengate, password password
 
ggsci>     add checkpointtable cal.checkpt
 
Successfully created checkpoint table cal.checkpt.
 
4.9.3             創建Replicat
add replicat rep_cal, exttrail ./dirdat/ca ,checkpointtable cal.checkpt  
 
4.9.4             配置replicat
edit params rep_cal
 
/********************************************************************/
 
REPLICAT rep_cal
 
SETENV (MYSQL_UNIX_PORT=/mysql/dbdata/mysql.sock)
 
sourcedb cal@localhost userid goldengate, password password
 
SQLEXEC "select CURRENT_TIME();" EVERY 10 MINUTES
 
REPORT AT  6:00
 
gettruncates
 
STATOPTIONS RESETREPORTSTATS
 
reperror (default,abend)
 
discardrollover at 6:00
 
numfiles 1000
 
MAXLONGLEN 8000
 
dynamicresolution
 
allownoopupdates
 
SOURCEDEFS ./dirdef/cal.def
 
GROUPTRANSOPS 100000
 
MAXTRANSOPS 100000
 
REPORTCOUNT EVERY 1 MINUTES RATE
 
discardfile ./dirrpt/rep_cal.dsc, append, megabytes 1000
 
MAP XIANYEZHAO.CALENDAR_DETAIL             , TARGET CAL.CALENDAR_DETAIL              ,KEYCOLS( SEQNO );
 
MAP XIANYEZHAO.CALENDAR_INFO               , TARGET CAL.CALENDAR_INFO                ,KEYCOLS( SEQNO );
 
 /********************************************************************/
 
若是oracle到oracle同步,則可以使用SCN 啟動Replica
 
start rep_cal, aftercsn 1138506
 
若是oracle到mysql,則直接啟動:
 
start rep_cal
 
查看命令:
 
GGSCI (mysqldb1) 20> info all
 
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
 
MANAGER     RUNNING                                          
 
REPLICAT    RUNNING     REP_CAL     00:00:00      00:00:08
 
GGSCI (mysqldb1) 21> view report rep_cal
 
5       Goldengate同步測試
5.1 開啟同步進程
源端開啟相關進程
 
GGSCI> start mgr
 
GGSCI> start ext_cal
 
GGSCI> start dp_cal
 
目標端開啟相關進程
 
GGSCI> start mgr
 
GGSCI> start rep_cal
 
5.2 異構不支持ddl同步
從oracle同步到mysql,屬于異構架構,不支持ddl同步,包括添加和刪除字段,添加和刪除索引,重命名表,表分析統計數據。
 
若是涉及到源端和目標端ddl操作,需要進行源端和目標端同時手工操作。
 
5.3 DML測試
從oracle同步到mysql,支持DML同步。
 
5.3.1             沒有主鍵的表同步
CALENDAR_20131213_LOTTERY共有647581條記錄,沒有主鍵的表,每次進行插入和刪除是按照100000條記錄進行批處理,該值是由參數決定。
 
插入從15:18:43開始,到15:21:22結束,共使用159秒。
 
刪除從15:25:07開始,到15:28:42結束,共使用215秒。
 
在全同步期間的產生的DML,在開始增量后,數據同步是一致。批量同步會有部分延遲,每秒同步的數據插入是4072條記錄,刪除是3012條記錄。
 
5.3.2             有主鍵的表同步
CALENDAR_INVITE_INFO表共有14358726條記錄,全量同步開始時間16:36:12,在16:56:40時刻,源端插入 6645999,mysql目標端插入3887999,有2758000條記錄延遲。源端全部完成插入14358726,mysql目標端插入8545999。在17:19:19時刻,完成全部數據量插入,使用2587秒,每秒插入5550條左右。對比沒有主鍵的表來說,快了36%左右。因此,要求同步的表必須添加主鍵。
 
 Update操作,calendar_detail表有12042條記錄,大概3秒左右完成同步目標端,更新為1.
 
SQL> select count(1) ,type from calendar_detail group by type;
 
  COUNT(1)       TYPE
 
---------- ----------
 
      1783          3
 
     10259          0
 
update calendar_detail set type=1;
 
mysql> select count(1) ,type from calendar_detail group by type;
 
+----------+------+
 
| count(1) | type |
 
+----------+------+
 
|    12042 |    1 |
 
+----------+------+
 
CALENDAR_INVITE_INFO使用下面同步腳本(存儲過程P_01):
 
declare
 
     row_num number ;
 
     cursor get_data is
 
       select
 
 SEQNO            ,
 
 CALSEQNO         ,
 
 UIN              ,
 
 INVITERUIN       ,
 
 INVITERALIAS     ,
 
 RECMYSMS         ,
 
 RECMYEMAIL       ,
 
 RECMOBILE        ,
 
 RECEMAIL         ,
 
 STATUS           ,
 
 REFUSERESION     ,
 
 INVITEAUTH       ,
 
 INVITEREMARK     ,
 
 INVITETIME       ,
 
 REMARKTIME       ,
 
 ENABLE           ,
 
 ISDELETED        ,
 
 BEFORETYPE       ,
 
 BEFORETIME       ,
 
 NOTIFYCONF       ,
 
 NEXTSENDDATE    
 
       from calendar01.CALENDAR_INVITE_INFO;
 
begin
 
    row_num := 1;
 
    for rec in get_data loop
 
       insert into CALENDAR_INVITE_INFO(
 
 SEQNO            ,
 
 CALSEQNO         ,
 
 UIN              ,
 
 INVITERUIN       ,
 
 INVITERALIAS     ,
 
 RECMYSMS         ,
 
 RECMYEMAIL       ,
 
 RECMOBILE        ,
 
 RECEMAIL         ,
 
 STATUS           ,
 
 REFUSERESION     ,
 
 INVITEAUTH       ,
 
 INVITEREMARK     ,
 
 INVITETIME       ,
 
 REMARKTIME       ,
 
 ENABLE           ,
 
 ISDELETED        ,
 
 BEFORETYPE       ,
 
 BEFORETIME       ,
 
 NOTIFYCONF       ,
 
 NEXTSENDDATE      
 
   )
 
       values(
 
        rec.SEQNO            ,
 
        rec.CALSEQNO         ,
 
        rec.UIN              ,
 
        rec.INVITERUIN       ,
 
        rec.INVITERALIAS     ,
 
        rec.RECMYSMS         ,
 
        rec.RECMYEMAIL       ,
 
        rec.RECMOBILE        ,
 
        rec.RECEMAIL         ,
 
        rec.STATUS           ,
 
        rec.REFUSERESION     ,
 
        rec.INVITEAUTH       ,
 
        rec.INVITEREMARK     ,
 
        rec.INVITETIME       ,
 
        rec.REMARKTIME       ,
 
        rec.ENABLE           ,
 
        rec.ISDELETED        ,
 
        rec.BEFORETYPE       ,
 
        rec.BEFORETIME       ,
 
        rec.NOTIFYCONF       ,
 
        rec.NEXTSENDDATE
 
      );      
 
      row_num := row_num + 1;
 
      --每2000條提交一次
 
      if mod(row_num, 2000) = 0 then
 
        commit;
 
      end if;
 
   end loop;
 
  commit;<

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙田区| 同德县| 蓬溪县| 罗源县| 布尔津县| 宿迁市| 尉犁县| 北安市| 玉山县| 宁陵县| 安远县| 普陀区| 虹口区| 和静县| 利津县| 霍邱县| 临桂县| 乌拉特后旗| 大姚县| 台安县| 大竹县| 六盘水市| 靖宇县| 舟曲县| 安乡县| 莱州市| 甘南县| 荥阳市| 手游| 资阳市| 淳安县| 陕西省| 竹山县| 洪泽县| 柳江县| 玛曲县| 那坡县| 柳江县| 龙岩市| 扎赉特旗| 冀州市|