8 Oracle GoldenGateシステムの準備
内容は次のとおりです。
8.1 SQL ServerのためのOracle GoldenGateプロセスのデータベース・ユーザー
Oracle GoldenGateでSQL Serverデータベースに対する取得および適用を実行するには、次のデータベース・ユーザーおよび権限が必要です。
親トピック: Oracle GoldenGateシステムの準備
8.1.1 SQL ServerのExtractユーザーとReplicatユーザー
Oracle GoldenGate Extractプロセスは、初期ロードの場合にはSQL Serverの表からのデータを取得し、変更データExtractの場合にはSQL Server変更データ取得表からのデータを取得します。Replicatプロセスは、ターゲットのSQL Serverデータベースにデータを適用します。 これらのプロセスは、Windows認証またはSQL Server認証を使用してデータベースに接続できます。
-
Windows認証を使用するために、Managerサービスの「プロパティ」に指定されている「ログオン」アカウントによって識別されるように、ExtractプロセスおよびReplicatプロセスがManagerプロセスのログイン資格証明を継承します。このアカウントは、次にリストされた権限を持つ必要があります。
Oracle GoldenGateプロセス ローカル・システム・アカウントを使用している場合のManagerの権限 ローカル/ドメイン・アカウントを使用している場合のManagerの権限 Extract (ソース・システム)
BUILTIN\Administrators
アカウントは、最低でもソース・データベースのロールdb_owner
のメンバーであることが必要です。アカウントは、最低でもソース・データベースの固定データベース・ロール
db_owner
のメンバーであることが必要です。Replicat
(ターゲット・システム)
BUILTIN\Administrators
アカウントは、最低でもターゲット・データベースの固定データベース・ロールdb_owner
のメンバーである必要があります。アカウントは、最低でもターゲット・データベースの固定データベース・ロール
db_owner
のメンバーである必要があります。 -
SQL Server認証を使用するには、ExtractおよびReplicat専用のSQL Serverログインを作成し、次にリストされている権限を割り当てる必要があります。
SQL Server認証を使用して接続するExtract | SQL Server認証を使用して接続するReplicat |
---|---|
アカウントは、最低でもソース・データベースの固定データベース・ロール |
アカウントは、最低でもターゲット・データベースの固定データベース・ロール |
SQL Server認証を使用している場合、ExtractまたはReplicatパラメータ・ファイルでUSERID
パラメータとPASSWORD
オプションを使用して、ユーザーおよびパスワードを指定する必要があります。または、Oracle GoldenGate資格証明ストアを使用して、USERIDALIAS
パラメータでユーザーの別名を指定することもできます。
8.1.2 Amazon RDSのユーザー権限および要件
SQL Server用にAmzon RDSの権限を設定するステップは、次のとおりです。
-
SQL Serverマスター・ユーザー名にAmazon RDSを使用して、Oracle GoldenGateプロセスで使用される新しいSQL Serverログインを作成します。
USE [master] GO CREATE LOGIN [ggs] WITH PASSWORD=N'ggs', DEFAULT_DATABASE=<source database> GO
-
SQL Serverに対するAmazon RDSのキャプチャまたは配信をサポートするかどうかに基づいて、次の権限をログインに付与します。
-
Extractユーザーと、Oracle GoldenGate CDCクリーンアップ・ジョブの
ADD
/DELETE TRANDATA
、ADD
/DELETE
/ALTER HEARTBEATTABLE
、Create
/Drop
。USE [msdb] GO CREATE USER [<user>] FOR LOGIN [<login>]; grant execute on msdb.dbo.rds_cdc_enable_db to [<user>]; grant execute on msdb.dbo.rds_cdc_disable_db to [<user>]; grant select on msdb.dbo.sysjobs to [<user>]; grant select on msdb.dbo.sysjobactivity to [<user>]; ALTER ROLE [SQLAgentUserRole] ADD MEMBER [<user>]; ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [<user>]; GO USE [<source database>] GO CREATE USER [<user>] FOR LOGIN [<login>]; ALTER ROLE [db_owner] ADD MEMBER [<user>]; GO
-
Replicatユーザーと、
ADD
/DELETE HEARTBEATTABLE TARGETONLY
、ADD
/DELETE CHECKPOINTTABLE
:USE [msdb] GO CREATE USER [<user>] FOR LOGIN [<login>]; grant select on msdb.dbo.sysjobs to [<user>]; grant select on msdb.dbo.sysjobactivity to [<user>]; ALTER ROLE [SQLAgentUserRole] ADD MEMBER [<user>]; GO USE [<target database name>] GO ALTER ROLE [db_owner] ADD MEMBER [<user>]; GO
-
ユースケースに応じて、データベースに作成される可能性があるOracle GoldenGateオブジェクトによって使用される新しいスキーマをデータベースに追加します。このスキーマ名は、GLOBALSファイルでパラメータ
GGSCHEMA
を使用して参照する必要があります。または、Microservices Architectureをインストールする場合は、デプロイメントの作成の際にスキーマ名の入力を求められます。USE [source database,target database] GO CREATE SCHEMA [OGG schema name];
ノート:
Amazonではsp_configure
がデフォルトにロックされるため、64MBを超えるテキスト・データはレプリケートできません。パラメータ・グループを使用する必要があります。
-
-
SQL Server用のAmazon RDSでSQL Server CDCクリーンアップ・ジョブを削除し、Oracle GoldenGate CDCクリーンアップ・ジョブに置き換えるには、次のスクリプトを実行します。
USE [source database] GO EXEC sys.sp_cdc_drop_job N'cleanup';
-
このスクリプトを実行してOracle GoldenGate CDCクリーンアップ・ジョブを作成します。インスタンス・エンドポイントおよびポート接続文字列を二重引用符で囲みます。スクリプトはMicrosoftの
SQLCMD
ユーティリティを使用するため、次の例に示すように、Oracle GoldenGateがインストールされているシステムにSQLCMD
がインストールされていることを確認してください。sh ogg_cdc_cleanup_setup.bat createJob login password source database "sql2016.samplestring.us-west-1.rds.amazonaws.com,1433" OGG schema name
8.1.3 サプリメンタル・ロギングなどの機能を有効にするユーザー
データベース・ユーザーは、Oracle GoldenGate構成内のソース・データベースに対してサプリメンタル・ロギングを有効にするために、ADD TRANDATA
コマンドを発行する必要があります。データベース・ログイン・コマンド(DBLOGIN)
は、ADD TRANDATA
の発行前にGGSCIから発行されます。
-
TRANDATA
を有効にするデータベース・ユーザーには、sysadmin
権限が付与されている必要があります。
Extractはdbowner権限で実行できます。ただし、ADD/ALTER/ DELETE/INFO HEARTBEATTABLE
コマンドを発行する場合や、ogg_cdc_cleanup_setup.bat
バッチ・ファイルを使用してOracle GoldenGate CDCクリーン・アップ・ジョブを作成する場合には、sysadmin
権限も必要になります。
8.2 データベース接続の構成
この項では、SQL ServerデータベースへのExtractおよびReplicatの接続を設定する手順について説明します。
親トピック: Oracle GoldenGateシステムの準備
8.2.1 Extractのデータベース接続の構成
Extractでは、ODBC (Open Database Connectivity)接続でソースSQL Serverデータベースに接続します。この接続を確立するには、「データ ソース (ODBC)」コントロール パネルからデータ・ソース名(DSN)を設定します。
手順は、Windowsでのデータベース接続の構成およびLinuxでのデータベース接続の構成を参照してください。
Always On環境のリスナーへの接続
Extractは、Always On環境のリスナーに接続できます。また、読取り専用問合せを使用可能な同期モードのセカンダリ・レプリカにルーティングするように構成できます。デフォルトでは、Extractがリスナーに接続していると、すべての処理がプライマリ・レプリカに対して実行されますが、Extractの構成でTRANLOGOPTIONS ALWAYSONREADONLYROUTING
パラメータが指定されていると、読取り専用問合せはリスナーによって使用可能な読取り可能セカンダリ・レプリカにルーティングされます。詳細は、TRANLOGOPTIONS
および「AlwaysOn可用性グループ内のデータベースのキャプチャおよび配信要件の概要」を参照してください。
親トピック: データベース接続の構成
8.2.2 Replicatのデータベース接続の構成
Replicatは、次のようにしてターゲット・データベースに接続しDML操作を実行できます。
-
ODBCを使用します。
-
SQL Serverドライバがサポートしている場合はOLE DBを使用します。
-
SQL Serverレプリケーション・ユーザーとしてOLE DBを使用します。
IDENTITY
列、外部キー制約、およびトリガーに、NOT FOR REPLICATION
を設定する必要があります。
使用する方法を選択する前に、次のガイドラインと手順を確認してそれぞれのメリットとデメリットを評価します。
8.2.2.1 ODBCまたはデフォルトのOLE DBの使用
ReplicatがODBC接続またはデフォルトのOLE DB接続を介して接続すると、次のような制限が適用されます。
-
ODBCまたはデフォルトのOLE DBを使用している場合に、ソースとターゲットに対して
IDENTITY
列をまったく同じに保つには、Replicatはトランザクションで特別な操作を作成し、必ずターゲットに対してシードがインクリメントされるようにします。これらのステップによって、配信パフォーマンスが低下する場合があります。 -
冗長な操作の可能性を排除するために、ターゲット表に対するトリガーおよび制約を調整または無効にする必要があります。
ReplicatをODBCまたはOLE DBと組み合せて使用するには、次のステップに従います。
親トピック: Replicatのデータベース接続の構成
8.2.2.2 OLE DBでのUSEREPLICATIONUSERの使用
ReplicatがUSEREPLICATIONUSER
オプションを指定したOLE DB経由でSQL Serverレプリケーション・ユーザーとして接続し、IDENTITY
のNOT FOR REPLICATION
が有効化されているときに、外部キー制約でトリガーされる場合は、次のような利点と制限が適用されます。
-
Replicatが挿入を実行すると、
IDENTITY
シードがインクリメントされません。双方向のSQL Server構成では、前の項のステップ3で示した例のように、シード値と増分値をずらして設定します。 -
トリガーは、冗長な操作を回避するために、ターゲット上でReplicatユーザーに対して自動的に無効になります。ただし、他のユーザーに対してはターゲット上でトリガーが起動されます。
-
外部キー制約は、Replicatトランザクションのターゲットに対して強制されません。
CASCADE
更新および削除は行われません。これらも冗長な操作を防ぎます。 -
CHECK
制約は、Replicatトランザクションのターゲットに対して強制されません。これらの制約は、データの取得前にソースに対して強制されますが、ターゲットに制約がないことでデータの整合性の問題が発生するかを検討します。ノート:
通常の
IDENTITY
、トリガー、および制約の機能は、Replicatレプリケーション・ユーザー以外のユーザーに対しては有効のままです。
USEREPLICATIONUSER
を設定してReplicatを使用するには、次のステップに従います。
ノート:
Oracle GoldenGateのSQL Server CDC for Linuxの場合、USEREPLICATIONUSER
オプションは使用できません。
ノート:
Replicatで、Microsoft ODBCドライバを使用する接続の場合は、USEREPLICATIONUSER
オプションをサポートするために、Microsoft OLE DB Driver 18 for SQL Serverをインストールします。
https://www.microsoft.com/en-us/download/details.aspx?id=56730
親トピック: Replicatのデータベース接続の構成
8.2.3 Linuxでのデータベース接続の構成
SQL Serverデータベース構成のOracle GoldenGateは、LinuxとWindowsに同じサポートを提供します。ただし、Linux環境の接続を設定するには、msodbcsql13*
またはmsodbcsql17*
ドライバが必要です。
次を参照してください。
-
データ・ソースのテンプレート・ファイルを作成します。
vi odbc_template_file.ini
-
テンプレート・ファイルにデータ・ソースを記述します。次の例では、データベースに接続するために、
DBLOGIN
およびSOURCEDB
での名前としてmyserver_ss2017_source
が使用されています。[myserver_SS2017_source] Driver = ODBC Driver 17 for SQL Server Server = myserver,1433 Database = source_database User = ssuser Password = ssuserpassword
-
次のコマンドを使用して、データ・ソースをインストールします。
odbcinst -i -s -f odbc_template_file.ini
詳細は、次を参照してください。
親トピック: データベース接続の構成
8.2.4 Windowsでのデータベース接続の構成
次の手順に従って、ソースまたはターゲットのSQL Serverデータベース用にSQL Serverシステムのデータ・ソース名(DSN)を作成します。DSNには、ODBC (Open Database Connectivity)を介したSQL Serverデータベースへの接続方法に関する情報が格納されます。
SQL ServerのDSNの作成手順
親トピック: データベース接続の構成
8.3 処理のための表の準備
次の項に示す表属性はOracle GoldenGate環境で処理する必要があります。
8.3.1 ターゲット表に対するトリガーおよびカスケード制約の無効化
SQL Serverがターゲットの環境では、ソースで発生した操作を繰り返す可能性のあるトリガーおよびカスケード制約を考慮します。たとえば、TableBにレコードを挿入するTableAの挿入トリガーがソースにあり、TableAおよびTableBの両方をキャプチャおよび配信するようにOracle GoldenGateが構成されている場合、ターゲット表TableAの挿入トリガーを無効にする必要があります。そうしないと、ReplicatはTableAに挿入し、トリガーが起動してTableBに挿入します。ReplicatはTableBにも挿入しようとするため、異常終了します。
-
DBOPTIONS USEREPLICATIONUSER
パラメータをReplicatに使用します。 -
OLE DB接続をReplicatに使用します。OLE DB接続の使用はデフォルトの構成です。トリガー、制約、または
IDENTITY
プロパティでNOT FOR REPLICATION
を有効にする必要があります。
次のシナリオでは、ターゲットでトリガーおよび制約を無効にします。
-
ソースのすべての表がレプリケートされる単方向のレプリケーション。
次のシナリオでは、ターゲットのトリガーおよび制約を有効にします。
-
トリガーまたはカスケード操作によって影響を受ける表がレプリケートされず、これらの表をロードするアプリケーションのみがトリガーまたはカスケード操作を使用している単方向のレプリケーション。
-
ソースのすべての表がレプリケートされる単方向または双方向のレプリケーション。このシナリオでは、ターゲット表のカスケード制約およびトリガーを設定して
NOT FOR REPLICATION
を有効にし、ReplicatのDBOPTIONS USEREPLICATIONUSER
パラメータを使用してください。
親トピック: 処理のための表の準備
8.3.2 行識別子の割当て
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表に一意の行識別子が必要です。ソース表は、Oracle GoldenGateが使用する行識別子の種類を判別する方法に記載されている任意の種類のキーを持つことができます。固定長の列が存在する表に主キーが識別されない場合、それらの固定長列のいずれかの長さは3800バイト未満である必要があります。
8.3.2.1 Oracle GoldenGateで使用する行識別子の種類を判別する方法
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
親トピック: 行識別子の割当て
8.3.2.2 KEYCOLS
を使用したカスタム・キーの指定
該当するキーが表にない場合、あるいは識別子を使用しない場合、表に常に一意の値を含んだ列があれば、代替キーを定義できます。ExtractのTABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS
句を含めることで、この代替キーを定義します。指定されたキーは、Oracle GoldenGateが検出する既存の主キーまたは一意キーを上書きします。
親トピック: 行識別子の割当て
8.3.3 配列処理を使用したIDENTITY
レプリケーションの改善
セッションごとに1つの表しかIDENTITY_INSERT
をON
に設定できないため、セッション内の複数の表にIDENTITY
データを適用するときは、ReplicatがIDENTITY_INSERT
の切替えを続ける必要があります。このような状況で、Replicatのパフォーマンスを改善するには、BATCHSQL
パラメータを使用します。BATCHSQL
を使用すると、Replicatは、一度に1つずつSQL文を適用するかわりに配列処理を使用します。
親トピック: 処理のための表の準備
8.4 グローバリゼーション・サポート
Oracle GoldenGateのグローバリゼーション・サポートにより、ネイティブ言語のエンコーディングでのデータ処理が可能になります。Oracle GoldenGateの適用プロセス(Replicat)では、文字型の列にデータが含まれている場合に、ある文字セットから別の文字セットへのデータ変換がサポートされます。
親トピック: Oracle GoldenGateシステムの準備