خب من برای راهاندازی سناریوی تستامون یک ماشین دیگه با مشخصات زیر آماده کردم که به عنوان مقصد ازش استفاده کنم:
همیشه یک DBA قبل اینکه گلدنگیت رو راهاندازی بکنه باید نقشه راهش رو بکشه و قوانین نامگذاریهای سرویسها و مسیرهاش رو هم مشخص و داکیومنت بکنه
من نقشه راه سناریوی تستمون رو با Microsoft Visio به صورت زیر کشیدم:
چون سناریویی که میخوام راهاندازی کنم Unidirectional هستش پس لزومی نداره یسکری مراحل که در راهاندازی سرور مبداء رفته بودم رو برم
مثلاً توی مقصد برای گلدنگیت اینکه دیتابیس روی حالت آرشیو باشه یا نباشه اهمیتی نداره چون کپچری اتفاق نمیافته
همچنین ساخت سرویسهای extract, pump نیازی نیست و همچنین نیازی به suplemntal log, trandata نیست
تنها چیزی که در مقصد نیاز داریم سرویس Manager, Replicat هستش و باید حتما CheckpointTable رو داشته باشیم
آمادهسازی محیط نصب در لینوکس
اولین کار اضافه کردن پارامترهای محیطی گلدنگیت به پروفایل کاربر اوراکل در مقصد هستش:
############## 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'
خب حالا دیتابیس رو روی حالت آرشیو میذارم (اختیاری)
SQL> startup mount;
ORACLE instance started.
Total System Global Area 697311232 bytes
Fixed Size 2256512 bytes
Variable Size 251658624 bytes
Database Buffers 440401920 bytes
Redo Buffers 2994176 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
حالا باید دایرکتوریهای مورد نیاز رو برای نصب گلدنگیت همراه با دسترسیهای مورد نیاز رو بسازیم
[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)
یکی از پارمترهای مهم برای گلدنگیت ORACLE_SID هستش چون ممکنه ما چند instance داشته باشیم پس گلدنگیت نیاز داره که بفهمه سراغ Online Redo Log File کدوم instance ما بره پس با تنظیم این پارمتر در سطح کاربر سیستمعامل به همه نرمافزارها میگیم که سراغ کدوم instance برن. حالا در شرایطی ما نیاز داریم فقط توی اون سرویس گلدنگیت یک instance دیگهای رو فراخونی کنیم اینجاست که باید از پارامتر SETENV در کانفیگ سرویس گلدنگیت مورد نظر استفاده کنیم اینجوری دیگه گلدنگیت به envهای سیستمعامل نگاه نمکینه و هر envای که تو این پارامتر تنظیم شده باشه براش اولویت هستش.
برای تنظیم پارامترها با SETENV مانند مثال زیر عمل کنید:
SETENV (ORACLE_HOME="/oracle/ora11g/product")
SETENV (ORACLE_SID="ora11src")
برای اجرای خودکار GGS در سطح لینوکس میتونید براش اسکریپت بنویسید یا سرویس لینوکسی تعریف کنید و یا به عنوان یک ریسورس در GRID معرفیش کنید تا 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
'/oradata/orcl/GGS.DBF/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;
پیکربندی پارامترهای دیتابیس
حالا نوبت به این رسیده که پارامترهای دیتابیس رو تنظیم کنیم.
اول: پارامتر sec_case_sensitive_logon رو برابر false قرار میدهیم تا به یوزرهای حروف بزرگ و کوچیک دیتابیس حساس نباشه (اختیاری)
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=BOTH;
دوم: پارامتر enable_goldengate_replication رو برابر true قرار میدهیم (اختیاری)
نکته: این پارمتر صرفاً برای دسترسی سرویس کپچر گلدنگیت به دیتابیس ایجاد شده
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=BOTH;
پیکربندی Supplemental Logging (اختیاری)
اگه شما یک سناریوی ۲ طرفه دارید این مرحله رو باید انجام بدید در غیر این صورت نیازی نیست
Alter database ADD supplemental log data;
نصب گلدنگیت بر روی سرور اوراکل مقصد
قبل نصب باید مدیای نصب رو دانلود کنیم من از ورژن 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
پیکربندی DDLها برای کپچر
بعد از نصب گلدنگیت سناریویی که شما میتونید به صورت پیشفرض اون رو پیادهسازی کنید سناریوهای DML هستش اگه نیاز دارید DDLهاتون رو هم کپچر کنید باید مراحل زیر رو ادامه بدید تا آبجکتهای انجام کار مثل تریگرهای مورد نیاز و جداول مورد نیاز رو بسازد:
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
حالا اسکریپت اول رو اجرا میکنم:
[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 ...
اسکریپت بعدی یک rule برای ما ایجاد میکنه
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.
حالا زیرساخت گلدنگیت ما هم برای راهاندازی سناریو ۱ طرفه و ۲ طرفه در مقصد آماده هستش
لاگین در محیط گلدنگیت
حالا به محیط ggsci با کاربر دیتابیس لاگین میکنیم:
[oracle@lx-01-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-01-oracle.roshak.org) 1> dblogin userid ggs, password ggs
Successfully logged into database.
فعالسازی CheckpointTable
چون سناریوی ما ۱ طرفه است حتما باید سمت مقصد CheckpointTable رو فعال کنیم چون Replicatامون با این جدول کار میکنه
GGSCI>Add CheckpointTable mycheckpt
پیکربندی فایل Globals
حالا نوبت به پیکربندی فایل global میرسه
[oracle@lx-01-oracle ggs]$ vim GLOBALS
[oracle@lx-01-oracle ggs]$ cat GLOBALS
GGSCHEMA GGS