راهاندازی مبدا
بردن دیتابیس به حالت ArchiveLog
اول از همه یادمون باشه ما دیتابیس اوراکلی رو میتونیم به حالت آرشیو ببریم که وقتی دیتابیسامون رو shutdown میکنیم تا به حالت mount برسیم instance recovery ای اتفاق نیوفتد یعنی لازمه حتما SCNها یکی شده باشند.
پس اگه ما shutdown abort کنیم و رو حالت mount ببریم و بخوایم دیتابیس رو به حالت آرشیو ببریم امکانش وجود نخواهد داشت.
دیتابیس رو shutdown میکنیم:
SQL> shut immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
دیتابیس رو به حالت mount میبریم:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2253784 bytes
Variable Size 1543506984 bytes
Database Buffers 100663296 bytes
Redo Buffers 7094272 bytes
Database mounted.
دیتابیس رو روی حالت آرشیو میذاریم:
SQL> alter database archivelog;
Database altered.
حالا دیتابیس رو open میکنیم تا instance تشکیل بشه
SQL> alter database open;
Database altered.
برای چک کردن این موضوع که دیتابیس ما تو حالت آرشیو لاگ هستش یا نه از دستور زیر در SQLPLUS استفاده میکنیم:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 109
Next log sequence to archive 111
Current log sequence 111
خب همونطور که میبینید مکانیزم آرشیو لاگ در این سرور فعال هستش و مقصد ذخیره آرشیوها در پارامتر db_recovery_file_dest تنظیم شده که اینجا همون فضای FRA ما هستش
حالا اگه یک Switch Logfile دستی بزنیم مشاهده میکنیم Online Redo Log File ما آرشیو شده
SQL> alter system switch logfile;
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 110
Next log sequence to archive 112
Current log sequence 112
فعال کردن Supplemental Log
برای چک کردن این fact (حقیقت) که این قابلیت فعال هستش یا نه از کوئری زیر استفاده میکنیم
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
خب من برای اینکه این قابلیت رو تو حالت minimal فعال کنم از دستور زیر استفاده میکنم
SQL> alter database ADD supplemental log data;
Database altered.
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
برای آشنایی بیشتر میتونید مطلب زیر رو مطالعه کنید:
تحلیل و بررسی Online Redo Logs
آمادهسازی محیط نصب در لینوکس
مرحله اول
قبل از هرچیزی باید دایرکتوریهای مورد نیاز رو برای نصب گلدنگیت همراه با دسترسیهای مورد نیاز بسازیم
[oracle@lx-02-oracle ~]$ mkdir -p /u02/app/oracle/ggs
[oracle@lx-02-oracle ~]$ chown -R oracle:oinstall /u02/app/oracle/ggs
[oracle@lx-02-oracle ~]$ chmod -R 770 /u02/app/oracle/ggs
[oracle@lx-02-oracle ~]$ ls -l /u02/app/oracle/
total 24
drwxr-x--- 3 oracle oinstall 4096 Oct 24 09:47 admin
drwxr-x--- 5 oracle oinstall 4096 Oct 24 10:17 cfgtoollogs
drwxr-xr-x 2 oracle oinstall 4096 Oct 23 20:41 checkpoints
drwxrwxr-x 11 oracle oinstall 4096 Oct 23 20:41 diag
drwxrwx--- 2 oracle oinstall 4096 Oct 24 16:42 ggs
drwxr-xr-x 3 oracle oinstall 4096 Oct 23 20:34 product
خب همونطور که میبینید دایکتوری ggs برای کاربر oracle و گروه oinstall دقیقاً rwx رو داره و برای گروه nobody هم دسترسی r-x داره (دسترسی 770)
مرحله دوم
تنظیم پارامترهای محیطی بر روی کاربر سیستمعامل:
############## GoldenGate Param ##############
export OGG_HOME=/u02/app/oracle/ggs; export OGG_HOME
export NLS_LANG=AMERICAN.UTF8; export NLS_LANG
export PATH=$ORACLE_HOME/bin:/u02/app/oracle/ggs:$PATH; export PATH
alias ggsci='rlwrap $OGG_HOME/ggsci'
یکی از پارمترهای مهم برای گلدنگیت ORACLE_SID هستش چون ممکنه ما چند instance داشته باشیم پس گلدنگیت نیاز داره که بفهمه سراغ Online Redo Log File کدوم instance ما بره پس با تنظیم این پارمتر در سطح کاربر سیستمعامل به همه نرمافزارها میگیم که سراغ کدوم instance اوراکل بروند.
حالا در شرایطی ما نیاز داریم که فقط در یک سرویس خاص گلدنگیت فقط همونجا یک instance دیگهای رو فراخونی کنه اینجاست که باید از پارامتر SETENV در کانفیگ اون سرویس گلدنگیت مورد نظر استفاده کنیم اینجوری دیگه گلدنگیت به envهای سیستمعامل نگاه نمکینه و هر مقداری که تو این پارامتر تنظیم شده باشه براش اولویت هستش.
برای تنظیم پارامترها با SETENV مانند مثال زیر عمل کنید:
SETENV (ORACLE_HOME="/oracle/ora11g/product")
SETENV (ORACLE_SID="ora11src")
برای اجرای خودکار GGS در سطح لینوکس میتونید براش اسکریپت بنویسید یا سرویس لینوکسی تعریف کنید و یا به عنوان یک ریسورس در Grid Infrastructure معرفیش کنید تا Oracle Restart یا Oracle Clusterware اون رو بالا بیاره
آمادهسازی محیط نصب در ویندوز
خب ما در ویندوز مانند لینوکس تمام مراحل را باید انجام بدیم یعنی باید ۲ پارامتر رو ORACLE_HOME و ORACLE_SID رو در سطح سیستمعامل تعریف بکنیم
و بعد از اینکار برای ساختن سرویس ggmgr در ویندوز باید وارد پوشه ggs در ویندوز بشیم و از دستور زیر استفاده کنیم:
E:\GGS>Install addservice autostart
با اینکار گلدنگیت به صورت خودکار بعد از لود ویندوز در سرویسهای ویندوز قرار میگیره و نیازی با استارت دستی اون نیستش
همچنین با دستور زیر میتونیم event گلدنگیت رو به eventviewer ویندوز اضافه کنیم:
E:\GGS>Install addevents
ایجاد کاربر دیتابیس برای گلدنگیت
اولین کاری که باید در اوراکل مبدا انجام بدیم ایجاد یک tablespace هستش این tbs برای این موضوع هستش که آبجکتهای موردنیاز برای ذخیره متادیتاهای گلدنگیت در این tbs قرار بگیره
همچنین ما بهتره اقدام به ساخت یک کاربر مجزا در سطح دیتابیس برای گلدنگیت بکنیم و این tbs رو پیشفرض کاربر قرار بدیم
برای ساخت این tbs در اوراکل میتونیم از دستور زیر استفاده کنیم:
CREATE TABLESPACE GGS DATAFILE
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\GGS.DBF' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 25G
LOGGING
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
حالا باید کاربر دیتابیس رو با این نکته که TBS پیشفرض این کاربر TBS مورد نظر است ایجاد کنیم
CREATE USER GGS IDENTIFIED BY GGS DEFAULT TABLESPACE GGS TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT ACCOUNT UNLOCK;
ایجاد دسترسیهای مورد نیاز برای کاربر گلدنگیت
لیست دسترسیهای گلدنگیت میتونه به صورت خیلی ریز و تفکیک شده باشه مثلا شما یک کاربر برای capture ddl و یک کاربر برای capture dml میتونید داشته باشید ولی من چون نیازی به ریز کردن سطح دسترسیها ندارم یه دسترسی کلی به این کاربر اعطا میکنم:
GRANT DBA TO GGS;
ALTER USER GGS DEFAULT ROLE ALL;
GRANT UNLIMITED TABLESPACE TO GGS;
نکته: به طور کلی این کاربر نیاز به دسترسی به بخشهای زیر داره که میتونید به صورت دستی این دسترسیها رو بدید البته میتونید براساس اینکه کاربر شما نیاز داره که DDL کپچر کنه یا DML یا هر دو دسترسیها رو دقیتر کنید.
a. Create session
b. Alter session
c. Select any dictionary
d. Create table
e. Execute on dbms_flashback
f. Flashback any table
g. Select any transaction
h. Select on v$database
i. execute on utl_file to
j. UNLIMITED TABLESPACE
لیست دسترسیها به تفکیک دسترسی
GRANT CONNECT, RESOURCE TO GGS;
GRANT SELECT ANY DICTIONARY, SELECT ANY TABLE TO GGS;
GRANT CREATE TABLE TO GGS;
GRANT FLASHBACK ANY TABLE TO GGS;
GRANT EXECUTE ON dbms_flashback TO GGS;
GRANT EXECUTE ON utl_file TO GGS;
GRANT CREATE ANY TABLE TO GGS;
GRANT INSERT ANY TABLE TO GGS;
GRANT UPDATE ANY TABLE TO GGS;
GRANT DELETE ANY TABLE TO GGS;
GRANT DROP ANY TABLE TO GGS;
GRANT ALTER ANY TABLE TO GGS;
GRANT ALTER SYSTEM TO GGS;
GRANT LOCK ANY TABLE TO GGS;
GRANT SELECT ANY TRANSACTION to GGS;
ALTER USER GGS QUOTA UNLIMITED ON GGS;
ALTER USER GGS DEFAULT ROLE ALL;
نصب گلدنگیت بر روی سرور اوراکل مبدا
قبل نصب باید مدیای نصب رو دانلود کنیم من از ورژن 12C GoldenGate مخصوص دیتابیس اوراکل استفاده میکنم البته این موضوع کاملا بستگی به پلتفرم و ورژن دیتابیس شما داره:
12.1.2.1.0_for_Linux_x86-64
بعد از دانلود فایل فشرده را به سرور منتقل میکنیم و فایل رو از حالت فشرده خارج میکنیم و دسترسیهای زیر رو به دایکتوری مربوطه میدیم:
[root@lx-02-oracle ~]# pwd
/home/oracle
[root@lx-02-oracle ~]# chown oracle:oinstall -R fbo_ggs_Linux_x64_shiphome/
[root@lx-02-oracle ~]# chmod 775 -R fbo_ggs_Linux_x64_shiphome/
حالا با کاربر اوراکل وارد دایرکتوری مربوطه میشیم و نصاب رو اجرا میکنیم:
[oracle@lx-02-oracle ~]$ cd fbo_ggs_Linux_x64_shiphome/
[oracle@lx-02-oracle fbo_ggs_Linux_x64_shiphome]$ ll
total 4
drwxrwxr-x 5 oracle oinstall 4096 Aug 7 2014 Disk1
[oracle@lx-02-oracle fbo_ggs_Linux_x64_shiphome]$ cd Disk1/
[oracle@lx-02-oracle Disk1]$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 4860 MB Passed
Checking swap space: must be greater than 150 MB. Actual 19443 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2017-11-01_04-51-39PM. Please wait ...[oracle@lx-02-oracle Disk1]$
[oracle@lx-02-oracle Disk1]$
نکته: نسخهی 12 به بالای گلدنگیت روی نسخههای 11.2.0.4.0 به بالای اوراکل 11g کار میکنه
نکته: تو این مرحله نصاب شما میتونید تنظیمات رو تغییر بدید من معمولاً پورت رو 65324 میذارم ولی شما میتونید هر پورتی رو تظنیم کنید
نکته۲: به محل نصب گلدنگیت دقت کنید چون به طور پیشفرض آدرس محل نصب دیتابیس رو قرار میده
بعد از نصب میتونید مسیر نصب رو چک کنید
[oracle@lx-02-oracle ggs]$ cd $GGS
[oracle@lx-02-oracle ggs]$ ls -m
bcpfmt.tpl, bcrypt.txt, cachefiledump, cfg, cfgtoollogs, chkpt_ora_create.sql, convchk, convprm, db2cntl.tpl, ddl_cleartrace.sql,
ddl_create.sql, ddl_ddl2file.sql, ddl_disable.sql, ddl_enable.sql, ddl_filter.sql, ddl_ora10.sql, ddl_ora10upCommon.sql,
ddl_ora11.sql, ddl_ora9.sql, ddl_pin.sql, ddl_remove.sql, ddl_session1.sql, ddl_session.sql, ddl_setup.sql, ddl_status.sql,
ddl_staymetadata_off.sql, ddl_staymetadata_on.sql, ddl_tracelevel.sql, ddl_trace_off.sql, ddl_trace_on.sql, defgen, deinstall,
demo_more_ora_create.sql, demo_more_ora_insert.sql, demo_ora_create.sql, demo_ora_insert.sql, demo_ora_lob_create.sql,
demo_ora_misc.sql, demo_ora_pk_befores_create.sql, demo_ora_pk_befores_insert.sql, demo_ora_pk_befores_updates.sql, diagnostics,
dirbdb, dirchk, dircrd, dirdat, dirdef, dirdmp, dirjar, dirout, dirpcs, dirprm, dirrpt, dirsql, dirtmp, dirwlt, dirwww, emsclnt,
extract, freeBSD.txt, ggcmd, ggMessage.dat, ggsci, ggserr.log, help.txt, install, inventory, jagent.sh, jdk, keygen, label.sql,
libantlr3c.so, libdb-5.2.so, libgglog.so, libggnnzitp.so, libggperf.so, libggrepo.so, libicudata.so.48, libicudata.so.48.1,
libicui18n.so.48, libicui18n.so.48.1, libicuuc.so.48, libicuuc.so.48.1, libxerces-c.so.28, libxml2.txt, logdump,
marker_remove.sql, marker_setup.sql, marker_status.sql, mgr, notices.txt, oggerr, OPatch, oraInst.loc, oui, params.sql,
prvtclkm.plb, pw_agent_util.sh, remove_seq.sql, replicat, retrace, reverse, role_setup.sql, sequence.sql, server, sqlldr.tpl,
srvm, tcperrs, ucharset.h, ulg.sql, UserExitExamples, usrdecs.h, zlib.txt
ابزارهای کار با گلدنگیت
برای ورود به ابزار تحت فرمان گلدنگیت از دستور زیر در فولدر گلدنگیت استفاده میکنیم:
[oracle@lx-02-oracle ggs]$ pwd
/u02/app/oracle/ggs
[oracle@lx-02-oracle ggs]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug 7 2014 09:14:25
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
GGSCI (lx-02-oracle) 1>
نکته: سعی کنید با ابزارهای تحت کامند کار کنید چون باگهای کمتری نسبت به ابزارهای گرافیکی دارند
از ابزارهای گرافیکی برای اوراکل گلدنگیت میشه به Oracle GoldenGate Studio و Oracle Enterprise Manager Cloud Control 12C, 13cv رو اشاره کرد
:: Oracle GoldenGate Monitor
:: Enterprise Manager Cloud Control 12C
پیکربندی DDLها برای کپچر
بعد از نصب گلدنگیت به صورت پیشفرض تنها سناریویی که شما میتونید اون رو پیادهسازی کنید سناریوهای DMLای هستش اگه نیاز دارید DDLهاتون رو هم کپچر کنید باید مراحل زیر رو ادامه بدید تا آبجکتهای انجام کار مثل تریگرهای مورد نیاز و جداول مورد نیاز رو بسازد:
cd /u02/app/oracle/ggs/
sqlplus / as sysdba
SQL>@marker_setup.sql
SQL>@ddl_setup.sql
SQL>@role_setup.sql
SQL>GRANT GGS_GGSUSER_ROLE TO GGS;
SQL>@ddl_enable.sql
SQL>@ddl_pin GGS
قبل از اجرای اسکریپتها من حالت حساس بودن روی حروف بزرگ و کوچیک اوراکل رو غیرفعال میکنم تا کارم راحتتر بشه شما میتونید این رو غیرفعال نکنید:
alter system set sec_case_sensitive_logon=false;
حالا اسکریپت اول رو اجرا میکنم:
[oracle@lx-02-oracle ggs]$ pwd
/u02/app/oracle/ggs
[oracle@lx-02-oracle ggs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Nov 1 17:34:42 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Automatic Storage Management option
SQL> @marker_setup.sql
Marker setup script
You will be prompted for the name of a schema for the Oracle GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter Oracle GoldenGate schema name:GGS
Marker setup table script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to GGS
MARKER TABLE
--------------------------------------------------------------------------------
OK
MARKER SEQUENCE
--------------------------------------------------------------------------------
OK
Script complete.
SQL>
اسکریپت بعدی یکسری مجوزها رو برای ما درست میکنه:
SQL> @ddl_setup.sql
Oracle GoldenGate DDL Replication setup script
Verifying that current user has privileges to install DDL Replication...
You will be prompted for the name of a schema for the Oracle GoldenGate database objects.
NOTE: For an Oracle 10g source, the system recycle bin must be disabled. For Oracle 11g and later, it can be enabled.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter Oracle GoldenGate schema name:GGS
Working, please wait ...
Spooling to file ddl_setup_spool.txt
Checking for sessions that are holding locks on Oracle Golden Gate metadata tables ...
Check complete.
Using GGS as a Oracle GoldenGate schema name.
Working, please wait ...
اسکریپت بعدی یک role برای ما ایجاد میکنه
SQL> @role_setup.sql
GGS Role setup script
This script will drop and recreate the role GGS_GGSUSER_ROLE
To use a different role name, quit this script and then edit the params.sql script to change the gg_role parameter to the preferred name. (Do not run the script.)
You will be prompted for the name of a schema for the GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter GoldenGate schema name:GGS
Wrote file role_setup_set.txt
PL/SQL procedure successfully completed.
Role setup script complete
Grant this role to each user assigned to the Extract, GGSCI, and Manager processes, by using the following SQL command:
GRANT GGS_GGSUSER_ROLE TO <loggedUser>
where <loggedUser> is the user assigned to the GoldenGate processes.
حالا همونطور که آخر اسکریپت میگه باید نقش ایجاد شده رو به کاربر گلدنگیت اعطا کنیم:
SQL> GRANT GGS_GGSUSER_ROLE TO GGS;
Grant succeeded.
تا الان داشتیم زیرساخت فعال کردن DDL بر روی گلدنگیت رو ایجاد میکردیم حالا نیازه که این قابلیت رو فعال کنیم:
SQL> @ddl_enable.sql
Trigger altered.
حالا باید این قابلیت رو بر روی کاربر گلدنگیت پین کنیم تا گلدنگیت هرجا به DDL خورد بتونه از این قابلیت استفاده کنه:
SQL> @ddl_pin GGS
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
دایرکتوریهای گلدنگیت
لیستی از دایرکتوریهای پرکاربرد گلدنگیت:
نکته: توی نسخههای قبل ۱۲ گلدنگیت یعنی ۱۱ ما نصاب نداریم و باید بعد از کپی فایلها در مسیر دلخواهمون برای ساخت دایکتوریها از دستور Create subdirs استفاده کنیم توی نسخه ۱۲ چون ویزارد نصب ما این دستور رو اجرا میکنه پس اگه ما خودمون این دستور رو بزنیم خروجی زیر رو میبینیم:
[oracle@lx-02-oracle ggs]$ ./ggsci
GGSCI (lx-02-oracle) 1> Create subdirs
Creating subdirectories under current directory /u02/app/oracle/ggs
Parameter files /u02/app/oracle/ggs/dirprm: already exists
Report files /u02/app/oracle/ggs/dirrpt: already exists
Checkpoint files /u02/app/oracle/ggs/dirchk: already exists
Process status files /u02/app/oracle/ggs/dirpcs: already exists
SQL script files /u02/app/oracle/ggs/dirsql: already exists
Database definitions files /u02/app/oracle/ggs/dirdef: already exists
Extract data files /u02/app/oracle/ggs/dirdat: already exists
Temporary files /u02/app/oracle/ggs/dirtmp: already exists
Credential store files /u02/app/oracle/ggs/dircrd: already exists
Masterkey wallet files /u02/app/oracle/ggs/dirwlt: already exists
Dump files /u02/app/oracle/ggs/dirdmp: already exists
حالا نوبت لاگین کاربر دیتابیس با محیط گلدنگیت هستش:
GGSCI (lx-02-oracle) 2> Dblogin userid GGS,password GGS;
Successfully logged into database.
تبریک میگم الان دیتابیس اوراکل مبدا شما آماده این هستش که گلدنگیت بر روی اون پیکربندی بشه همچنین الان گلدنگیت قابلیت انتقال DMLها و DDLهاتون رو داره