40

[A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi
Page 2: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Oracle移行を簡単に。~レプリケーションテクノロジーを使いこなす~

(株)インサイトテクノロジー(株)インサイトテクノロジー(株)インサイトテクノロジー(株)インサイトテクノロジー

K.Miyachi

Page 3: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

【自己紹介】

Page 4: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

システムリプレイス実施の関門となるDB、データ移行

を、

『できるだけ短期間』

かつ

『より心安らか』

に行えるよう、ポイントとなる点について解説します!

~はじめに~

Page 5: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

� Export / Import

� DataPump(expdp / impdp)

� DataGuard(Physical Standby)

� DataGuard(Logical Standby)

� Replication software

� 自前で開発

データデータデータデータ移行移行移行移行のののの方法方法方法方法 ~方式方式方式方式~

Page 6: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

データ移行の方法データ移行の方法データ移行の方法データ移行の方法 ~決定要素決定要素決定要素決定要素~

� サービス停止(DB停止)の許容時間

� 使用データ型

� データチェック方法

� プロジェクト期間、予算

Page 7: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

exp/imp or datapump ?

~ Oracleが標準で提供するユーティリティ ~※※※※10g以降は以降は以降は以降はdatapump推奨推奨推奨推奨

システム停止時間は必要だけど、実績もたっぷり、安定感

・安心感は半端ない憎いやつ

� サービス停止時間は?

数時間~数十時間必要。(データ量に比例)

� データ型については?

制限はない

Page 8: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

exp/imp or datapump ?

� データチェック方法は?

ログで件数、エラー無しを確認それ以上は自作が必要

� 注意点は?

- マルチバイト文字- パフォーマンス- exp/impは性能に難ありなので、9iからのデータ移行時のみ

Page 9: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

DataGuard((((Physical Standby))))or

DataGuard((((Losical Standby)))) ????

~ Oracle EEで使えるDR用の機能 ~

EEが必要だけど、システム停止時間が短くて済む、

ゴージャスなやつ

� サービス停止時間は?

数分~数十分。(ロールの切替え等)

� データ型については?

logical standbyは一部データ型が使えない

Page 10: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

DataGuard((((Physical Standby))))or

DataGuard((((Losical Standby)))) ????

特になし

移行元、先のバージョンが一致している必要あり

� データチェック方法は?

� 注意点は?

Page 11: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Physical Standby Database Architecture

スタンバイデータベースは、プライマリーデータベースの100%バイナリコピー

(redo logs, standby controlfilesを除く)

リカバリリカバリリカバリリカバリ

Page 12: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Losical Standby Database Architecture

変更情報を変更情報を変更情報を変更情報をSQL文に変換し文に変換し文に変換し文に変換し

て実行て実行て実行て実行

Page 13: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

DataGuard((((Physical Standby))))or

DataGuard((((Losical Standby)))) ????

REDO適用の特徴適用の特徴適用の特徴適用の特徴 フィジカルフィジカルフィジカルフィジカル ロジカルロジカルロジカルロジカル

REDO適用のアーキテクチャ Redo Apply SQL Apply

REDO適用の方法 リカバリの機能で適用 SQL文に変換して適用

REDO適用のパフォーマンス

REDO適用時のスタンバイの状態 マウント、オープン オープン

災害対策

プライマリの更新量が多い

バックアップ目的で利用

スタンバイを検索目的で利用

運用の容易性

【参考】Physical vs Logical

Page 14: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

無停止(に近い)データレプリケーションのためには:

1. DDL/DML Replication

DML文だけでなくDDL文もターゲットデータベースへレプリケート

2. Delta Replication (Incremental Load)

更新情報のレプリケート

3. Group Replication

スキーマ単位・テーブルグループ単位でのレプリケート

データベースレプリケーション

Page 15: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

� REDOログファイル分析のためのLogMinerを使用して情報を取得

V$LOGMNR_CONTENTS(Oracleマニュアルから一部抜粋)

Replication Architecture

列 データ型 説明SCN NUMBER データベースに変更が加えられた時点のシステム変更番号(SCN)START_SCN NUMBER この変更を含むトランザクションが開始されたときのシステム変更番号(SCN)。COMMITTED_DATA_ONLYオプションがDBMS_LOGMNR.START_LOGMNR()の起動時に選択された場合のみ有効、それ以外の場合はNULL。この列は、トランザクションの開始を含まない時間/SCN範囲に問合せが実⾏されると、NULLになることもある。COMMIT_SCN NUMBER トランザクションのコミット時のシステム変更番号(SCN)。COMMITTED_DATA_ONLYオプションがDBMS_LOGMNR.START_LOGMNR()の起動時に選択された場合のみ有効。TIMESTAMP DATE データベースに変更が加えられた時点のタイムスタンプSTART_TIMESTAMP DATE この変更を含むトランザクションが開始されたときのタイムスタンプ。COMMITTED_DATA_ONLYオプションがDBMS_LOGMNR.START_LOGMNR()の起動時に選択された場合のみ有効、それ以外の場合はNULL。この列は、トランザクションの開始を含まない時間/SCN範囲に問合せが実⾏されると、NULLになることもある。COMMIT_TIMESTAMP DATE トランザクションのコミット時のタイムスタンプ。COMMITTED_DATA_ONLYオプションがDBMS_LOGMNR.START_LOGMNR()の起動時に選択された場合のみ有効。USERNAME VARCHAR2(30) トランザクションを実⾏したユーザーの名前OS_USERNAME VARCHAR2(4000) オペレーティング・システムのユーザー名SQL_REDO VARCHAR2(4000) 再構成されたSQL⽂で、変更を実⾏した元のSQL文と同じ。SQL_UNDO VARCHAR2(4000) 再構成されたSQL⽂で、変更を実⾏した元の⽂の結果を取り消すために使⽤できる。

Page 16: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

USERNAME SQL_REDO

RON set transaction read write;

RONinsert into "HR"."JOBS"("JOB_ID","JOB_TITLE","MIN_SALARY","MAX_SALARY") values ('9782','HR_ENTRY',NULL,NULL);

RON commit;

JANE set transaction read write;

JANE

insert into "OE"."CUSTOMERS"("CUSTOMER_ID","CUST_FIRST_NAME","CUST_LAST_NAME","CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE","NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL","ACCOUNT_MGR_ID") values ('9839','Edgar','Cummings',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

JANE commit;

JANE set transaction read write;

JANE

insert into "OE"."CUSTOMERS"("CUSTOMER_ID","CUST_FIRST_NAME","CUST_LAST_NAME","CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE","NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL","ACCOUNT_MGR_ID") values ('8933','Ronald','Frost',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

JANE commit;

RON set transaction read write;

RONinsert into "HR"."JOBS"("JOB_ID","JOB_TITLE","MIN_SALARY","MAX_SALARY") values ('9566','FI_ENTRY',NULL,NULL);

RON commit;

Replication Architecture

� V$LOGMNR_CONTENTSサンプル(Oracleマニュアル抜粋)

Page 17: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

USERNAME SQL_REDO

RON set transaction read write;

RONinsert into "HR"."JOBS"("JOB_ID","JOB_TITLE","MIN_SALARY","MAX_SALARY") values ('9782','HR_ENTRY',NULL,NULL);

RON commit;

JANE set transaction read write;

JANE

insert into "OE"."CUSTOMERS"("CUSTOMER_ID","CUST_FIRST_NAME","CUST_LAST_NAME","CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE","NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL","ACCOUNT_MGR_ID") values ('9839','Edgar','Cummings',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

JANE commit;

JANE set transaction read write;

JANE

insert into "OE"."CUSTOMERS"("CUSTOMER_ID","CUST_FIRST_NAME","CUST_LAST_NAME","CUST_ADDRESS","PHONE_NUMBERS","NLS_LANGUAGE","NLS_TERRITORY","CREDIT_LIMIT","CUST_EMAIL","ACCOUNT_MGR_ID") values ('8933','Ronald','Frost',NULL,NULL,NULL,NULL,NULL,NULL,NULL);

JANE commit;

RON set transaction read write;

RONinsert into "HR"."JOBS"("JOB_ID","JOB_TITLE","MIN_SALARY","MAX_SALARY") values ('9566','FI_ENTRY',NULL,NULL);

RON commit;

Replication Architecture

� V$LOGMNR_CONTENTSサンプル(Oracleマニュアル抜粋)

このデータを使えば(ほぼ)リア

ルタイムにデータの同期ができるぞ!!

Page 18: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

小まとめ小まとめ小まとめ小まとめ

方式方式方式方式 ポイントポイントポイントポイント

exp/imp or datapump システム停止時間がシステム停止時間がシステム停止時間がシステム停止時間が2日間程度日間程度日間程度日間程度取れるなら

迷わずこれ!

移行検証に掛かる時間も少ない。

dataguard システム停止時間が無停止に近い、且つ移移移移行元・先が同バージョンで行元・先が同バージョンで行元・先が同バージョンで行元・先が同バージョンでEEならならならなら迷わずこれ迷わずこれ迷わずこれ迷わずこれ!

移行検証に掛かる時間も少ない。

replication software システム停止時間が無停止に近いシステム停止時間が無停止に近いシステム停止時間が無停止に近いシステム停止時間が無停止に近い、且つ移移移移行元・先が別バージョンなら検討行元・先が別バージョンなら検討行元・先が別バージョンなら検討行元・先が別バージョンなら検討!

柔軟にデータ連携ができるので、複数DBからの統合にも使える。

Page 19: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

~ 各社が提供するソフトウェア ~

ライセンス料はかかるけど、色々できる、

ユーティリティ・プレイヤー!

� サービス停止時間は?

数分~3時間程度

� データ型については?

製品により制限がある。※※※※全く制限のないものはない全く制限のないものはない全く制限のないものはない全く制限のないものはない

Page 20: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

製品により対応状況が異なる

次スライド以降・・・

� データチェック方法は?

� 注意点は?

replication software ?

Page 21: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント1

変更情報を記録するための設定

-サプリメンタル・ロギングの設定が必要サプリメンタル・ロギングの設定が必要サプリメンタル・ロギングの設定が必要サプリメンタル・ロギングの設定が必要

→ データベース単位、テーブル単位で設定可能データベース単位、テーブル単位で設定可能データベース単位、テーブル単位で設定可能データベース単位、テーブル単位で設定可能

<コマンドコマンドコマンドコマンド>alter database add supplemental log data();alter table XXXX add supplemental log data ();

コマンド実行時に排他ロックが掛かるので要注意コマンド実行時に排他ロックが掛かるので要注意コマンド実行時に排他ロックが掛かるので要注意コマンド実行時に排他ロックが掛かるので要注意

排他ロックを獲得するまでに7時間待たされた・・・

Page 22: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント2

初期データ移行、差分同期開始タイミング

exp開始時に実行中のトランザクションデータが連携されない・・・

- exp/impを使用する場合、静止点が必須- その他の方式でも静止点をとって実行が推奨

Page 23: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント2

初期データ移行、差分同期開始タイミング

exp開始時に実行中のトランザクションデータが連携されなくなる・・・

exp/impを使用する場合、静止点が必須

Page 24: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント3

トリガー

トリガーで作成されたデータが倍になってる・・・→ 件数が合わなくて困る!!

-移行先DBで無効にしておく!(C/O時に有効化)

Page 25: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント4

シーケンス

シーケンスがずれているせいで、アプリの動作確認で問題発生!!

-移行元DB停止直前のシーケンス番号から開始となるようにする。

Page 26: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント5

nologging

上記処理で登録されたデータが連携されない為、データが一致しない・・・

nologgingのテーブルにダイレクト・パス・インサート等を行うと変更履歴がREDOに記録されない!!

- SQL*Loaderのダイレクト・ロード- insert /*+ APPEND +*/ into XXXX as select .....;

的な処理が行われていないか確認が必要

Page 27: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント6

事前検証・テスト

①検証環境

- 移行元・先のデータベースは本番と合わせる移行元・先のデータベースは本番と合わせる移行元・先のデータベースは本番と合わせる移行元・先のデータベースは本番と合わせる→ OS,バージョン、エディション、データベースの作成方法までバージョン、エディション、データベースの作成方法までバージョン、エディション、データベースの作成方法までバージョン、エディション、データベースの作成方法まで

Page 28: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

ハマリポイント6

事前検証・テスト

本番移行中、原因不明のエラーで異常終了した・・・

②検証内容

- 実際に実行されるバッチ・オンライン処理を一通り実行さ実際に実行されるバッチ・オンライン処理を一通り実行さ実際に実行されるバッチ・オンライン処理を一通り実行さ実際に実行されるバッチ・オンライン処理を一通り実行させて、正常に同期されることを確認する。せて、正常に同期されることを確認する。せて、正常に同期されることを確認する。せて、正常に同期されることを確認する。

通り一遍等のSQL文や簡単な処理のみのテストでは本番移行期間中に予期せぬ事故に合う可能性も・・・

Page 29: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

事例事例事例事例 原因・対応原因・対応原因・対応原因・対応

本番移行/データ同期期間中に移行元・先でデータ

件数不一致

<原因>

nologgingテーブルへのダイレクト・パス・インサート<対応>該当テーブルはexp/impで個別に移行

本番移行/データ同期期間中にレプリケーション

ソフトウェアで一意制約違反(ora-0001)が発生

<原因>

ソフトのバグ

<対応>メーカーから提供されたパッチを適用

本番移行/データ同期期間中に、データ件数不一致 <原因>

初期データ移行時のexp時に実行中のトランザクションあり。該当トランザクションのデータロスト

<対応>

初期データ移行から再実行

本番移行/データ同期期間中にレプリケーション

タスクが異常終了

<原因>

REDOログのSCN番号不正<対応>メーカーから提供されたパッチを適用

代表的なハマり事例

Page 30: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

replication software ?

事例事例事例事例 原因・対応原因・対応原因・対応原因・対応

本番移行/データ同期期間中に移行元・先でデータ

件数不一致

<原因>

nologgingテーブルへのダイレクト・パス・インサート<対応>該当テーブルはexp/impで個別に移行

本番移行/データ同期期間中にレプリケーション

ソフトウェアで一意制約違反(ora-0001)が発生

<原因>

ソフトのバグ

<対応>メーカーから提供されたパッチを適用

本番移行/データ同期期間中に、データ件数不一致 <原因>

初期データ移行時のexp時に実行中のトランザクションあり。該当トランザクションのデータロスト

<対応>

初期データ移行から再実行

本番移行/データ同期期間中にレプリケーション

タスクが異常終了

<原因>

REDOログのSCN番号不正<対応>メーカーから提供されたパッチを適用

代表的なハマり事例

実運用に合わせた検証に時間を使えば実運用に合わせた検証に時間を使えば実運用に合わせた検証に時間を使えば実運用に合わせた検証に時間を使えば

このような障害は回避できる!!このような障害は回避できる!!このような障害は回避できる!!このような障害は回避できる!!

Page 31: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

レプリケーションソフトウェアの紹介

Page 32: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Oracle GoldedGate Architecture

Source DB Target DB

※Source DB/Target DBにAgentのインストールが必要

GoldenGate

Manager

Extract(Capture)

Extract(Data Pump)

GoldenGate

Manager

Collector Replicat(Data Pump)

Change Data Capture

Trail file Trail file

REDO LOG

Page 33: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Attunity Replicate Architecture

Replication Server

Bulk Reader

CDC AgentStream Loader

Source DB Target DB

Change Data

Capture

Change DataLoad

REDO LOG

Page 34: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

2000+ Customers42% of Fortune 50; 37% of Fortune 100

Page 35: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

項目 Oracle GoldenGate Attunity Replicate

非対応データタイプ

BFILEROWIDREFUROWIDUser-defined data typesetc…

BFILEROWIDREFUROWIDUser-defined data typesNested Tableetc…

監視 オプション

GUI オプション

初期データローディング ×

システムへの負荷 △

エージェントインストール 要 不要

レプリケーション方式実装比較

Page 36: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

GoldenGate ユーザ・インタフェース

Page 37: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Attunity ユーザ・インタフェース

Page 38: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

Demonstration

Page 39: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi

移⾏ツール自作に時間を掛ける(≒お⾦もかかる)なら、移⾏⽤ソフトウェアを使用して事前のテストを

タップリと実施し、心安らかにC/O当日を迎えませんか?

~まとめ~

Page 40: [A23] Oracle移行を簡単に。レプリケーションテクノロジーを使いこなす by Keishi Miyachi