برای ساخت این سرویس اول از همه باید فایل پیکربندی اون رو بسازیم:

edit param eora1

و پیکربندی زیر رو درون اون قرار بدیم:

EXTRACT eora1 
USERID ggs, &
PASSWORD ggs
TRANLOGOPTIONS EXCLUDEUSER ggs, asmuser sys@ASM, asmpassword sys
ENCRYPTTRAIL AES128 KEYNAME supermaskey
EXTTRAIL dirdat/l1
DDL INCLUDE MAPPED
TABLE TEST_USER.*;

خط اول: ما مشخص میکنیم که یک سرویس extract به اسم eora1 میخوایم

خط دوم: مشخص میکنیم که نام‌کاربری ما چیه

خط سوم: پسورد رو کاربر گلدن‌گیتمون رو وارد میکنیم (می‌تونیم به صورت هش شده اون رو وارد کنیم)

نکته: توی گلدن‌گیت برای اضافه کردن سرویسها باید به صورت اسکرپت‌نویسی عمل کنیم یعنی هر خط اینجا یک دستور جدید محسوب میشه برای اینکه ادامه‌ی دستوری رو خط بعدش بنویسیم از & استفاده می‌کنیم 

خط چهارم: با دستور TRANLOGOPTIONS ما بر روی TRAIN Fileها مدیریت انجام می‌دیم یکی از آپشنهای این دستور EXCLUDEUSER هستش که با دادن کاربر ggs من از ایجاد loop جلوگیری کردم.

نکته: اگه دیتابیس شما با ASM پیکربندی شده چون Redo Log های ما در دیسک گروه‌های ASM وجود دارن و گلدن‌گیت نیاز داره به طور مستقیم با Online Redo Log Fileها کار بکنه ما باید مشخصات کاربر ASM رو هم بهش بدیم که اینکار رو با آپشنهای asmuser, asmpassword در دستور TRANLOGOPTIONS انجام می‌دیم.

برای اتصال به Instance ASM و چک کردن نام‌کاربری و پسوردتون می‌تونید بدین شکل عمل کنید:

sqlplus sys/passwd as sysdba@+ASM

خط پنجم: می‌گیم که خروجی TRAIL Fileهای ساخته شده باید به صورت رمزنگاری شده باشند، برای فعال بودن رمزنگاری باید یک کلید براش بسازیم که توضیحاتش رو در غالب یک پست جدا میدم.

نکته: مکان این خط خیلی مهمه چون حتما باید قبل از دستور EXTTRAIL باشه و اگه بعد EXTTRAIL بذارید چون شما TRAILهاتون ساخته شده دیگه رمزنگاری قابلیت انجام نداره و سرویس استارت نمیشه

خط ششم: همونطور که تو معماری گلدن‌گیت گفتم اگه سرویس ما ExtTrail باشه یعنی تو لوکال داره TRAILها رو میسازه و اگه RmtTrail باشه یعنی به صورت ریموتی داره TRAIL ها رو میسازه مثل مثال زیر:

RmtHost mytarget.example.com, MgrPort 7809 
RmtTrail dirdat/r

چون من این سولشن رو نیاز ندارم در فایل پیکربندی پیکربندیش رو انجام نمیدم. جلوی این دستور باید مسیر trail ها رو بنویسیم و در صورتی که از ExtTrail استفاده میکنیم بهتره اسامی فایلها رو با l1 و در صورتی که از RmtTrail استفاده می‌کنیم با r شروع کنیم

قاعده فعلی تا نسخه 12.1 برای ایجاد نامهای Trail یک رشته ۸ کاراکتری است که ما ۲ تا کاراکتر اول رو مشخص میکنیم و مابقی صفر پر میشه و کانتر میخوره برای هرکدوم

نکته: اگه از لینوکس استفاده می‌کنید دقت داشته باشید که در لینوکس فایلهای حروف بزرگ و کوچیک باهم متفاوت هستند و از اونجایی که همه چیز در لینوکس فایل هستش شما باید به case-sensitive بودن آدرسها دقت کنید

خط هفتم: برای captureهای DDLها هستش ما با این دستور به capture‌میگیم که دستورات DDL تمام آبجکتهای مپ شده به دیتابیس رو هم بگیره

اگه هم نیاز داشتیم بگیم فقط یک اسکیمای خاص DDLهاش Capture بشه از دستور زیر استفاده می‌کنیم:

DDL INCLUDE OBJECT TEST_UNIDIRECTIONALGGS.*

شکل کلی دستور:

DDL [
 { INCLUDE | EXCLUDE }
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE ]
  [, OBJTYPE '']
  [, OBJNAME ]
  [, INSTR '']
  [, INSTRCOMMENTS '']
  [, STAYMETADATA]
  [, EVENTACTIONS {}
]

خط هشتم: تو این خط من مشخص کردم که فقط یکسری جدول یا اسکیما خاص capture بشوند مانند مثال زیر:

TABLE TEST_UNIDIRECTIONALGGS.*;

اگه هم بخواین کل اسکیما کپچر بشه و فقط چندتا جدول داخل اون اسکیما کپچر نشن از دستور زیر بعد از دستور قبلی استفاده میکنیم:

TABLEEXCLUDE TEST_UNIDIRECTIONALGGS.TEST_GGS_1;

خب برای سناریوی تست ما پیکربندی زیر از طرف من در نظر گرفته شده و برای این سناریو کفایت میکنه

EXTRACT eora1
USERID ggs, PASSWORD ggs
TRANLOGOPTIONS EXCLUDEUSER ggs, asmuser sys@ASM, asmpassword Zz123456
EXTTRAIL dirdat/l1
DDL INCLUDE OBJNAME TEST_UNIDIRECTIONALGGS.*
TABLE TEST_UNIDIRECTIONALGGS.*;
TABLEEXCLUDE TEST_UNIDIRECTIONALGGS.TEST_GGS_1;

ساخت سرویس

حالا باید بر مبنای این کانفیگ فایل یک سرویس بسازیم:

ADD EXTRACT eora1, TRANLOG, BEGIN NOW

اینجا می‌گیم یک سرویسی اضافه بشه از جنس Extract به اسم eora1 (این اسم باید با اسم فایل پیکربندی یکی باشه)

همینطور می‌گیم TRANLOG باشه یعنی تغییرات از لاگ خونده بشن (Online Redo Log File, Archive Log File)

با BEGIN هم ساعتی که می‌خوایم اینکار شروع بشه رو مشخص می‌کنیم که با زدن NOW از همین لحظه عملیات Capture انجام میشه

GGSCI (lx-02-oracle as GGS@orcl) 14> info all
Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING
EXTRACT STOPPED EORA1 00:00:00 00:00:07

همونطور که می‌بینید این سرویس اضافه شده و تو وضعیت STOP هستش

حالا باید به سرویس Capture امون بفهمونیم که خروجیش TRAILهایی تو مسیر dirdat هستش و حجم هر TRAILای که میسازه باید حداکثر چقدر باشه اینکارو با دستور EXTTRAIL انجام میدیم

ADD EXTTRAIL dirdat/l1, EXTRACT eora1, MEGABYTES 100

نکته: هر فایل TRAIL گلدن‌گیت بیشتر از ۲ گیگ نمیتونه باشه و اگه بالای ۲ گیگ بره سرویس abend میشه

نکته: اگه از لینوکس استفاده می‌کنید دقت داشته باشید که در لینوکس فایلهای حروف بزرگ و کوچیک باهم متفاوت هستند و از اونجایی که همه چیز در لینوکس فایل هستش شما باید به case-sensitive بودن آدرس‌ها دقت کنید

استارت سرویس

حالا باید سرویسمون رو استارت کنیم

start eora1

Sending START request to MANAGER ...
EXTRACT EORA1 starting

اگه سرویس استارت نشد با گرفتن report از اون می‌تونیم دلیل خطا رو بفهمیم

view report eora1

عیب‌یابی

پیکربندی ASM

اگه به خطایی مبنی بر عدم اتصال گلدن‌گیت به ASM برخوردید مثل زیر:

OGG-00868 Attaching to ASM server asm: (12154) ORA-12154: TNS:could not resolve the connect identif
ier specified.

باید مراحل زیر رو برای اضافه کردن Instance ASM به TNS انجام بدید.

به مسیر TNS برید و خطوط زیر رو برای اضافه کردن TNS جدید اضافه کنید:

cd /u02/app/oracle/product/11.2.0/db_1/network/admin/
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = S2E2.precisetrace.com)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = ORCL)
)
(SID_DESC =
(ORACLE_HOME = /u02/app/oracle/product/11.2.0/grid)
(SID = +ASM)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = lx-02-oracle)(PORT = 1521))
)

ADR_BASE_LISTENER = /u01/app/oracle

ASM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lx-02-oracle)(PORT = 1521))
)
(CONNECT_DATA =
(SID = +ASM)
)
)

حالا برای تست محیط دستورات زیر رو انجام بدید

$ . oraenv
ORACLE_SID = [S2E2] - +ASM
The Oracle base remains unchanged with value /u01/app/oracle
$ sqlplus /nolog
 
SQL*Plus: Release 11.2.0.4.0 Production on Fri May 31 11:08:35 2015
 
Copyright (c) 1982, 2015, Oracle.  All rights reserved.
 
SQL> conn / as SYSASM
Connected.

حالا می‌تونید پیکربندی سرویس capture رو دوباره با TNS درست انجام بدید (مثالی از پیکربندی سرویس capture):

EXTRACT eora2
SETENV (ORACLE_SID=ORCL)
SETENV (ORACLE_HOME="/u01/app/oracle/product/11.2.0/db_1")
SETENV (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
USERID ggs_admin@orcl, PASSWORD AACAAAAAAAAAAAGAIFAAUDVHCFUGFIYF, ENCRYPTKEY DEFAULT
TRANLOGOPTIONS ASMUSER sys@ASM, ASMPASSWORD Zz123456
EXTTRAIL dirdat/sa
TABLE osm$repapi.customers, WHERE (cust_no > 100000);
TABLE osm$repapi.policies,  WHERE (cust_no > 100000);

پیکربندی پارامتر گلدن‌گیت

اگه پیغام خطای زیر رو مشاهده کردید:

OGG-02091  Operation not supported because enable_goldengate_replication is not set to true.

مشکل از اینه که توی نسخه‌ی 11.2.0.4.0 به بعد یک پارمتری برای GGS در سطح دیتابیس اضافه شده تا گلدن‌گیت بتونه بر روی دیتابیس فعالیت داشته باشه پس باید این پارمتر TRUE بشود:

وضعیت ABENDED

حالا اگه یک info all بگیریم می‌بینم وضعیت سرویسمون به ABENDED تغییر پیدا کرده:

GGSCI (lx-02-oracle as GGS@orcl) 71> info all
Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING
EXTRACT ABENDED EORA1 00:00:00 00:54:17

وضعیت abend یعنی سرویس گلدن‌گیت یکبار start شده و داشته کار میکرده و حالا به هر دلیلی مشکل خورده و پایین اومده

برای چک کردن مشکل view report eora1 رو می‌گیریم و با اومدن با آخر فایل با space متوجه خطای مربوطه می‌شیم:

ERROR   OGG-01091  Unable to open file "DIRDAT/l1000000" (error 2, No such file or directory).

خب مشخصه مشکل عدم دسترسی به دایرکتوری هستش چون من تو پیکربندی سرویس دایکتوری رو با حروف بزرگ نوشتم و در حقیقت اسم دایرکتوری ما با حروف کوچیکه سیستم‌عامل من هم - لینوکس به حروف بزرگ و کوچیک حساسه برای حل این مشکل کافیه اسم دایرکتوری رو با حروف کوچیک بنویسیم:

edit param eora1 
EXTRACT eora1
USERID ggs, PASSWORD ggs
TRANLOGOPTIONS EXCLUDEUSER ggs, asmuser sys@ASM, asmpassword Zz123456
EXTTRAIL dirdat/l1
DDL INCLUDE OBJNAME TEST_UNIDIRECTIONALGGS.*
TABLE TEST_UNIDIRECTIONALGGS.*;

حالا سرویس رو دوباره استارت می‌کنیم (چون سرویس پایین بوده نیازی به stop نیست)

start eora1

حالا وضعیت سرویس capture ما در حال اجرا هستش

GGSCI (lx-02-oracle) 11> info all
Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING
EXTRACT RUNNING EORA1 00:00:00 00:00:04