本ブログは3回にわたって執筆している「vCenterとSDDC ManagerのDBをローカルPCにインポートする方法」の第三回目です。
前回と前々回の記事はこちらを参照してください。
vCenterとSDDC ManagerのDBをローカルPCにインポートする方法【DBダンプ取得方法】
vCenterとSDDC ManagerのDBをローカルPCにインポートする方法【PostgreSQLのインストール】
第三回の今回は一回目で取得したDBダンプを、二回目で構築したローカルPCのPostgreSQL DMBSにインポートします。
DB Dumpファイルの下処理
SDDC ManagerのDBダンプ(postgres-db-dump.gz)は、解凍してテキスト形式(postgres-db-dump)のファイルにさせしてしまえばそれでOKです。
それ自体で完結していますので特に何もする必要はありません。
問題はvCenterのDBダンプのほうです。vCenterのVCDBはTablespaceと呼ばれる機能で、DBの一部を別の場所に保存しています。
(この辺りは私の知識ではよくわかってませんが、、)
第一回の記事で、/storage/seat/vpostgres/* の部分をまとめてTarで固めて圧縮しましたが、その部分がTablespaceにあたります。
TableSpaceの場所はDB Dump内にフルパスで記載されてなければならず、VCSAから採取したDB Dumpには当然、/storage/seat/vpostgres/のままになっています。
ローカルのDMBSにインポートする前にこのパスを修正する必要があります。
1.vCenter DB Dumpの下準備その①【解凍する】
何はともあれまずは解凍しましょう。話はそれからです。
ローカルPCに転送したtgz形式のファイルを任意の解凍ツールで解凍してください。
以下のファイルが含まれているはずです。
- vcdb_dump
- alarmtblspディレクトリ
- eventtblspディレクトリ
- hs1tblspディレクトリ
- hs2tblspディレクトリ
- hs3tblspディレクトリ
- hs4tblspディレクトリ
- tasktblspディレクトリ
2.vcdb_dumpファイルをテキストエディタで開いて編集する
次にvcdb_dumpファイルをテキストエディタで開きます。
ファイル自体がとても大きいため、Notepadではスペックが足りません。
※大容量のテキストファイルを開けるエディタを利用してください。もしくは転送前のVCSAにてviなどで編集してから転送してください。(筆者は秀丸を利用してます)
編集するのは以下のTablespaceについての項目です。
見て分かる通り、TablespaceのロケーションのPathがVCSA内のロケーションにままです。
これを編集して、ローカルPCのロケーション(絶対パス)に書き直します。
以下は書き直した際の例です。書き直す際は実際に実施している環境のPathに置き換えてください。
書き換えが終わったらSaveしてDB ダンプ側の対処は終了です。
PostgreSQL側の下準備
次にPostgreSQL側の事前準備を説明します。
PostgreSQLにpgadminで接続する場合は特に準備は不要なのですが、psqlで接続する場合は事前に対処が必要となります。
psqlはPostgreSQL DBMSを起動した際にすでにpsqlで接続済みの状態となっていますが、このCLIは利用することができません。
まず、psqlのCLIからはDBをインポートできませんし、インポート後にいろいろやっているとすぐにエラーになって使えないことがわかります。
エラーになる理由は私にはわかりませんが、とりあえず、別途psqlを別途起動し、改めて接続すれば問題ありません。
しかしながら改めて接続した場合でも、いくつか問題が発生するため事前に下準備をする必要があります。
まずはPowershellを起動し、バッファサイズを最大にします。デフォルトのバッファサイズだと少なすぎて表示が切れてしまうからです。
次に、起動したPowershellで、PostgreSQL DBMSをインストールしたフォルダのどこかにあるpsql.exeを実行すれば、DBMSに接続できるのですが、このままだと文字コードの問題が発生します。
細かくは説明しませんが、日本語のWindows環境のデフォルトはShift JISなのに対し、DB Dumpの中身はUTF-8なので表示する際に問題が発生するのです。
なので、Powershellの表示文字コードとpsqlのデフォルトの文字コードを両方ともUTF-8にする必要があります。
何はともあれPowershellを起動して以下の2つのコマンドを実行すればOKです。
> chcp 65001
> $env:PGCLIENTENCODING = "UTF8"
1つ目のコマンドはPowershellの文字コードをUTF8にするためのものです。
2つ目のコマンドはpsqlの文字コードをUTF8にするためのものです。
このコマンドを実行したら、一度postgreSQL DBMSに接続してください。以下のコマンドで接続できます。
> psql.exe -U postgres
接続したら以下のコマンドをうってエンコードがUTF8になっていることを確認します。
postgres=# SHOW client_encoding;
一連の流れの例は以下です。
※chcp 65001を実行した直後にPowershellがRefreshされるため、このコマンドの実行行は表示されてません
Active code page: 65001
PS C:\Users\administrator\Downloads\vcdb_dump> $env:PGCLIENTENCODING = "UTF8"
PS C:\Users\administrator\Downloads\vcdb_dump>
PS C:\Users\administrator\Downloads\vcdb_dump>
PS C:\Users\administrator\Downloads\vcdb_dump>
PS C:\Users\administrator\Downloads\vcdb_dump> C:\Users\administrator\Downloads\PostgreSQLPortable\App\PgSQL\bin\psql.exe -U postgres
psql (10.4)
WARNING: Console code page (65001) differs from Windows code page (932)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
postgres=# SHOW client_encoding;
client_encoding
-----------------
UTF8
(1 row)
postgres=#
DB Dumpのインポートを実行
ここまで確認出来たらいったんpsqlからExitします。Exit方法は\qです。
Exitしたら以下のコマンドで、postgreSQL DBMSにDBをインポートします。
> psql.exe -U postgres -f .\vcdb_dump
※-f オプションでdb dumpのファイルを指定しています。インポートするdb dumpは一つだけを想定しています。別のdb dumpをインポートしたい場合は後述の手順でいったんDBをResetし、再度イニシャライズしてからインポートします。
インポート中にエラーが出ないことを確認してください。Tablespaceのパスが間違っていた場合は、エラーが表示されます。
※「role "postgres" already exsits 」 というエラーが出るのは問題ありません。それ以外のエラーがでたら内容を確認してください。
問題なく完了したら改めて、> psql.exe -U postgres で接続してください。
\l (¥マークと小文字のエル)でDatabaseの一覧を表示すると、インポートされたデータベースが表示されていると思います。
pgadminのGUIからも同様に確認できるはずです。(自動で更新されない場合はrefreshして下さい。)
DMBSの再イニシャライズ方法(ポータブル版のみ)
上記まででDB ダンプのインポートは完了なのですが、別の環境のDBをインポートしようとすると名前がかぶったりしてしまうのでうまくインポートできないはずです。
個別に削除してもいいのですが、ゴミがすべて手動で消すのは面倒なので、再度イニシャライズをしてしまうのが良いです。
ポータブル版の場合、再度イニシャライズするのは非常に簡単です。
ポータブル版のPostgreSQLをインストールしたフォルダにDataというフォルダがあると思います。
Dataフォルダ配下にさらにdata というフォルダがあります。
このdata というフォルダを丸ごと削除して、DMBSを再度起動すればOKです。
- まずは既存のPosgreSQL DMBSを終了します。終了方法は起動した際のコマンドプロンプトのpsqlを\qでExitすればOKです。
- 次の上記のdataフォルダを丸ごと消してください。
- 再度PostgreSQLを起動すれば、DBがイニシャライズされ初期状態になります。(それまでに書き込んだ処理はすべて消えます。)
これでDBMSが初期状態に戻ってますので、きれいな状態で再度あたらしいDB Dumpをインポート可能です。
いかがでしたでしょうか。
三回に分けて紹介したDB Dumpのインポートはこれで終了です。
実際には閲覧をするためにはpsqlの使い方やSQL文の知識が必要になりますが、この記事ではカバーしません。
Internet上にわかりやすい記事があると思うので探してみてください。