LoginSignup
0
2

More than 3 years have passed since last update.

AWS DMS Binary Readerを試してみる :下準備

Last updated at Posted at 2020-07-21

ASM + Binary Readerが試したかった

Source DBの準備

OCIのDBCSでサクッと行きたかった。

DBの作成

「DBシステムの作成」から、

  • シェイプ・タイプの選択: 仮想マシン
  • シェイプの選択: VM.Standard2.1
  • 合計ノード数:1
  • Oracle Databaseソフトウェア・エディション: Enterprise Edition
  • ストレージ管理ソフトウェアの選択: Oracle Grid Infrastructure
  • 使用可能なストレージ(GB):256GB
  • SSHキー:適当に追加
  • データベースのバージョン:11.2

CPUを絞ったせいか、あまりサクッとは行かなかった。後続のインスタンス作成を進めたほうが良い。

起動済:

2020年7月21日(火) 11:12:03 UTC
終了済:

2020年7月21日(火) 12:02:43 UTC

DMS用ユーザ作成(DB)

[opc@testdb0721 ~]$ sudo -i
[root@testdb0721 ~]# su - oracle
最終ログイン: 2020/07/21 () 12:37:14 UTC
[oracle@testdb0721 ~]$ sqlplus / as sysdba
SQL> CREATE USER dms_user IDENTIFIED BY dmsTESTuser0721
DEFAULT TABLESPACE USERS;

User created.

SQL> ALTER USER dms_user ACCOUNT UNLOCK;

User altered.

SQL> 

権限付与

AWS DMS のソースとしての Oracle データベースの使用

GRANT CONNECT TO dms_user;

GRANT SELECT ANY TRANSACTION TO dms_user;
GRANT SELECT on V_$ARCHIVED_LOG TO dms_user;
GRANT SELECT on V_$LOG TO dms_user;
GRANT SELECT on V_$LOGFILE TO dms_user;
GRANT SELECT on V_$DATABASE TO dms_user;
GRANT SELECT on V_$THREAD TO dms_user;
GRANT SELECT on V_$PARAMETER TO dms_user;
GRANT SELECT on V_$NLS_PARAMETERS TO dms_user;
GRANT SELECT on V_$TIMEZONE_NAMES TO dms_user;
GRANT SELECT on V_$TRANSACTION TO dms_user;
GRANT SELECT on ALL_INDEXES TO dms_user;
GRANT SELECT on ALL_OBJECTS TO dms_user;
GRANT SELECT on v_$transportable_platform TO dms_user;
GRANT EXECUTE on DBMS_FILE_GROUP TO dms_user;

上のマニュアルにはないが、下記の権限も必要っぽい。
Oracle をソースエンドポイントとして使用する場合に、AWS DMS が必要とするアクセス許可について教えてください。

GRANT SELECT on SYS.DBA_REGISTRY to dms_user;
GRANT SELECT on SYS.OBJ$ to dms_user;

8/10:さらにいくつか追加

GRANT SELECT on ALL_TABLES to dms_user;
GRANT SELECT on ALL_USERS to dms_user;
GRANT SELECT on ALL_CATALOG to dms_user;
GRANT SELECT on ALL_CONSTRAINTS to dms_user;
GRANT SELECT on ALL_CONS_COLUMNS to dms_user;
GRANT SELECT on ALL_TAB_COLS to dms_user;
GRANT SELECT on ALL_IND_COLUMNS to dms_user;
GRANT SELECT on ALL_LOG_GROUPS to dms_user;
GRANT SELECT on DBA_TABLESPACES to dms_user;
GRANT SELECT on ALL_TAB_PARTITIONS to dms_user;
GRANT SELECT on ALL_ENCRYPTED_COLUMNS to dms_user;

GRANT SELECT on ALL_VIEWS to dms_user;

GRANT CREATE ANY DIRECTORY to dms_user;

テストデータ作成用

GRANT CREATE TABLE TO dms_user;
GRANT UNLIMITED TABLESPACE TO dms_user;

ASMユーザの作成

rootに戻ってgridからASMインスタンスにログイン。(DBCSのGIは19cみたい)

[root@testdb0721 ~]# su - grid
最終ログイン: 2020/07/21 (火) 13:14:18 UTC
[grid@testdb0721 ~]$ sqlplus / as sysasm

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 21 13:19:56 2020
Version 19.7.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0

SQL> 
CREATE USER dms_asm_user IDENTIFIED BY dmsTESTasm0721;
GRANT SYSASM to dms_asm_user;

DBの設定

DBレベルでのサプリメンタルロギングを有効化する。

SELECT supplemental_log_data_min FROM v$database;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT supplemental_log_data_min FROM v$database;

DMSの準備

レプリケーションインスタンス

DBCSのインスタンス作成と並行して、

  • インスタンスクラス: dms.t2.micro
  • エンジンバージョン: 3.3.3
  • パブリックアクセス可能にチェック
    • 今回はインターネット越しにやるので。

Target DBの準備

Aurora

DBCSのデプロイを待つ間に進めます。
RDSから、

  • 標準作成
  • エンジンのオプション: Amazon Aurora
  • エディション: PostgreSQL との互換性を持つ Amazon Aurora
  • バージョン: Compatible with PostgreSQL 11.6
  • テンプレート: 開発/テスト
  • DB インスタンスクラス: バースト可能クラス (t クラスを含む) > db.t3.medium
  • マルチ AZ 配置: Aurora レプリカを作成しない
  • パブリックアクセス可能:あり
  • 追加設定 > 最初のデータベース名: DB名を入れておく

  • セキュリティグループは待ち受けポートへのアクセス許可がついたものをつけておく。

DMSの設定

Target エンドポイント

エンドポイントの作成から、ターゲットエンドポイントを選び、
「RDS DBインスタンスの選択」を選ぶと適宜補完してくれる。

  • パスワードとDB名だけ入れる
  • 接続テストで問題なければok

Source エンドポイント

  • ソースエンジン: oracle
  • サーバー名: IPアドレス
  • ポート: 設定したポート(デフォルト1521)

追加の接続パラメータ

useLogMinerReader=N;useBfile=Y;asm_user=dms_asm_user;asm_server=RAC_server_ip_address:port_number/+ASM;

入れずに接続テストをすると、LogMiner用の権限も必要になる。

Aurora(postgreSQL)のクライアント

DBCSのインスタンスに入れてしまう。


# yum install postgresql
# psql -h <host名> -U <user名>

動作テスト

ソーステーブル

Oracle DB

CREATE TABLE TEST1
(
    COL_A NUMBER(4) PRIMARY KEY
   ,COL_B DATE
);
insert into TEST1 values(0000,SYSDATE);
commit;

テーブルレベルのサプリメンタルロギングを有効化しておく。

alter table TEST1 add supplemental log data (PRIMARY KEY) columns;
SQL> select COL_A, to_char(COL_B,'YYYY/MM/DD hh24:Mi:ss') from TEST1;

     COL_A TO_CHAR(COL_B,'YYYY
---------- -------------------
         0 2020/07/21 15:26:15

ターゲットDB

とりあえず同名のスキーマを作成しておく。

CREATE SCHEMA DMS_USER;
postgres=> \dn
    スキーマ一覧
   名前   |  所有者  
----------+----------
 dms_user | postgres
 public   | postgres
(2 )

DMS

データベース移行タスクからタスク作成。
テーブルマッピングで対象のテーブルを追加する。

確認

Aurora
dms_test=> select * from "DMS_USER"."TEST1";
 COL_A |        COL_B        
-------+---------------------
     0 | 2020-07-21 15:26:15
(1 )
oracle
insert into TEST1 values((select max(COL_A) + 1 from TEST1),SYSDATE);
commit;
select * from TEST1 where COL_A = (select max(COL_A) from TEST1);

CDCがうまく動かなかった

フルロードは完了するものの、ソースを更新しても反映されず。
とりあえずここまで。

ログをみてみる

CloudWatch
[SOURCE_CAPTURE  ]E:  ORA-01031: insufficient privileges  [1022317]  (oracle_endpoint_utils.c:3169)
[SOURCE_CAPTURE  ]E:  ORA-06550: line 1, column 7: PL/SQL: Statement ignored  [1022307]  (oracle_endpoint_utils.c:3169)
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2