こんにちは! 株式会社BFT名古屋支店・新卒の「なる」と「もな」です!
行った手順を以下の3ステップで、全2回の記事に分けてご紹介したいと思います。 こちらの記事(後半)では②、③について書いていきます。 今回の検証の背景やOra2pgの詳しい話は、前半のブログに書いてあるので知りたい方はそちらを読んでみてください~!
今回の移行のゴールは「OracleにあるサンプルスキーマHRのテーブルとデータをPostgreSQLに移行すること」です。
※サンプルスキーマHRは、Oracleインストール時にインストールするか、Oracleインストール後に自分でインストールしてください。
1.OracleからデータやDDL等をエクスポートし、データ移行SQLを作成する 2.データ移行SQLをPostgresで読み込んで移行したいデータをPostgresにインサートする 今回のブログでは、以上の手順を詳しく説明していきたいと思います!
はじめに今回移行したいHRスキーマのテーブルとデータがOracleにあることを確認します。 ①Ora2pgサーバにrootユーザでログインする ②Ora2pgサーバからOracleサーバのsystemユーザーにログイン ③ユーザー一覧を取得 →HRスキーマがあることを確認する ④ユーザーのロック状況を確認 ※ここでHRスキーマが「EXPIRED & LOCKED」となっていたら、ロックを解除し、新しいパスワードを設定する →新しいパスワードを設定する ⑤HRユーザーにログイン ⑥HRスキーマにあるテーブルを表示(これらをPostgresに移行する) 以下のようにHRスキーマにあるテーブルが出力される ⑦HRスキーマにあるテーブルのデータを表示(これらをPostgresに移行する) 以下のように出力されること エクスポートするHRスキーマのテーブルとデータがあることを確認できました~! 次にエクスポートする前のOra2pgサーバの状態を確認します!
エクスポートを実行すると移行用SQLファイルが作成されます。 ここでは、エクスポート前確認として、①「schema」配下のディレクトリに何も入っていないこと、②「data」ディレクトリ配下に何も入っていないことを確認します。 →何も入っていないことが確認できます! ②「data」ディレクトリ配下を確認 では実際にエクスポートをしていきましょう!
①export_schema.sh を実行して、OracleオブジェクトをPostgresオブジェクトとしてエクスポートする →/root/migration/test_projectにいること 最後に「To extract data use the following command:ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf」と出力されたら成功です!
②データを抽出する ※完了するまで何回かコマンドをうつ (今回のサーバはスペックが低いので、7回抽出コマンドを打ちました) →ここでは/root/migration/test_project/data配下に、SQLファイルが作成されます。 エクスポート実行後、移行用SQLファイルが作成されたことを確認してみます!
エクスポート実行後、移行用SQLファイルが作成されたことを確認します! ①「schema」配下のディレクトリを確認 ②「data」ディレクトリ配下を確認 OracleからOra2pgサーバにデータエクスポートすることができました~! あとはPostgresにインポートするだけです! インポートする前のPostgresの状態を確認します。 ①Ora2pgサーバからAzure Database for PostgreSQLに接続をする
→パスワードを入力しログインします
→まだインポートしていないので、HRスキーマのテーブル・データがないことを確認する では実際にインポートをしていきましょう!
①生成されたデータ移行SQLファイルを読み込む →ここでPostgreSQLにテーブルが作成されます! ②Ora2pgからPostgreSQLにデータインポートする →ここでPostgreSQLにデータが作成されます! インポートしたテーブルとデータが作成されたことを確認します! ①PostgreSQLにログインする ②インポート実行で作成されたテーブルがあることを確認する →Oracleで確認した7つのテーブルが作成されています! ③インポート実行で作成されたデータがあることを確認する 上記の通り、テーブル「COUNTRIES」のデータを確認すると、こちらもOracleで確認したデータが作成されています! GUI操作できる「pgAdmin」でもみてみると、HRスキーマにあったテーブル・データが移行されていることが確認できました~!! これでやっとサンプルスキーマHRのテーブルとデータが移行できました~!お疲れ様でした! 今回はPostgreSQLのスキーマ指定せずに、テーブルとデータを移行したので、publicスキーマに移行されていました!
(PostgreSQLではスキーマを指定せずにテーブルを作成するとpublicスキーマに配置されるそうです) 以下参考資料 Ora2pgの公式サイトによるとconfファイルの設定で移行先のスキーマを指定できるそうですが、今回の検証ではうまくいきませんでした…泣。原因が分かったらまた記事にするかもです... 最後まで読んでいただきありがとうございます!! まだまだひよっこエンジニアなのでこれからも頑張っていきます!!
はじめに
今回はOra2pgを用いたデータベースの移行に挑戦しました!
① Ora2pgサーバ構築
② Oracleデータベースからのデータエクスポート
③ PostgreSQLデータベースへのデータインポート
bftnagoya.hateblo.jp
では、移行作業の内容について大まかに説明していこうと思います。作業の流れと構成図
使用環境
Oracleサーバ
PostgreSQLサーバ
前提条件
事前準備
※psqlのバージョンはPostgresと合わせてインストールしてください
※sqlplusについては、第1章のOra2pgサーバ構築の際にインストール済
OracleからOra2pgにデータエクスポートしてみよう!
移行前確認
※Oracleのリスナーが起動していること
※Oracleのサービス名を取得しておくこと # sqlplus64 system/[パスワード]@[OracleサーバのプライベートアIPアドレス]:1521/[Oracleサービス名]
SQL> select username from dba_users;
SQL> select username,account_status from dba_users;
※SQL> alter user HR account unlock identified by [元のパスワード];
SQL> connect hr/[パスワード]@[OracleサーバのプライベートアIPアドレス]:1521/[Oracleサービス名]
SQL>select table_name from user_tables;
※出力例として、テーブル「COUNTRIES」のデータを表示させます。SQL>select * from COUNTRIES;
SQL>exit
エクスポート前確認
その前にSQLファイルがないことを確認しておきます。# ls -l /root/migration/test_project
→test_project配下の「export_schema.sh 」を実行すると、「schema」「sources」ディレクトリ配下に、テーブル等の移行用SQLファイルが作成されます。
①「schema」配下のディレクトリを確認
※出力例として、「tables」の中身を表示させます。# ls -l /root/migration/test_project/schema
# ls -l /root/migration/test_project/schema/tables
# ls -l /root/migration/test_project/data
→こちらも何も入っていないことが確認できます!
エクスポート実行
※移行テンプレートはOra2pgサーバ構築時に作成済# cd /root/migration/test_project
# pwd
# ./export_schema.sh
→ここでは/root/migration/test_project/schema配下の、「procedures」「sequences」「tables」「triggers」「views」ディレクトリの中にSQLファイルが作成されます。# ora2pg -t COPY -o data.sql -b ./data -c ./config/ora2pg.conf
エクスポート後確認
※出力例として、「tables」の中身を表示させます。# ls -l /root/migration/test_project/schema
# ls -l /root/migration/test_project/schema/tables
→test_project配下の「procedures」「sequences」「tables」「triggers」「views」 ディレクトリの大きさが増えていますね!
さらに、「tables」ディレクトリ配下を見てみると、SQLファイルが作成されています!# ls -l /root/migration/test_project/data
→「data」ディレクトリ配下を見てみると、SQLファイルが作成されています!
Ora2pgからPostgreSQLにデータインポートしてみよう!
インポート前確認
※Ora2pgサーバーからAzure Database for PostgreSQLへの通信が許可されていること# psql "host=[サーバ名] port=5432 dbname=[データベース名] user=[ユーザー名] sslmode=require"
②テーブル一覧を取得postgres=> \dt
postgres=> \q
インポート実行
# psql -f /root/migration/test_project/schema/sequences/sequence.sql -h [サーバー名] -p 5432 -U [ユーザー名] -d [データベース名]
# psql -f /root/migration/test_project/schema/tables/table.sql -h [サーバー名] -p 5432 -U [ユーザー名] -d [データベース名]
# psql -f /root/migration/test_project/data/data.sql -h [サーバー名] -p 5432 -U [ユーザー名] -d [データベース名]
インポート後確認
# psql "host=[サーバ名] port=5432 dbname=[データベース名] user=[ユーザー名] sslmode=require"
postgres=> \dt
※出力例として、テーブル「COUNTRIES」のデータを表示させます。postgres=> select * from countries;
まとめ
PostgreSQLの“仕様”による、運用者にとって悩み深い脆弱性とは
https://atmarkit.itmedia.co.jp/ait/articles/1805/16/news010.html
以上でOra2pgサーバをインストールして、このOra2pgサーバをつかってOracleからPostgresへの移行が完了しました!
参考資料
・Oracle を Azure Database for PostgreSQL に移行する
docs.microsoft.com
・ora2pgドキュメンテーション
ora2pg.darold.net
【Ora2Pg,Oracle,Postgres】【全2回】Ora2pgを用いたデータベース移行に挑戦!_後半
今回は"既存のオンプレ環境のOracleDB"から"クラウド(Azure)環境のPostgresDB(PaaS)"への移行を想定して以下のような構成で検証を行いました。詳しい説明は前半のブログをご覧ください!
Ora2pgサーバ