技術ブログ
技術ブログ
しばらく時間が経ってしまいましたが、JAWS Festa 2013 大阪でOracle Database on AWSのアンカンファレンスに参加してきました。
アンカンファレンスの様子については、参加いただいた植木さんに詳細なレポート(+いい写真!)をまとめていただいています。植木さんありがとうございます!
アンカンファレンスで話したこと、 Amazon RDS for Oracle Databaseに触ってみました&気になることメモで書いたことなどについて、マニュアルなどを参考に調べてみた結果や、アンカンファレンスで大島さんから教えていただいたことを一応まとめておきたいと思います。
以下の資料を参考にしました。
"Instance Actions" -> "Take DB Snapshot"でインスタンス稼働中にバックアップを取得できます。
アラートログを確認すると、BEGIN BACKUP, END BACKUP コマンドを使用した、いわゆる「ユーザー管理のバックアップ」を実行していることがわかります。(制御ファイルのバックアップも取得されています)
Thu Oct 10 00:58:28 2013 alter database backup controlfile to '/rdsdbdata/tmp/backup_control_file' reuse Completed: alter database backup controlfile to '/rdsdbdata/tmp/backup_control_file' reuse alter database begin backup Completed: alter database begin backup alter database end backup Completed: alter database end backup
Snapshotsから リストアしたいスナップショット(=バックアップ)を選択して、"Restore Snapshot"でリストアできるようです。
なお、同名のデータベースが存在している場合は、"DB Instance already exists"というエラーが発生し、リストアできません。リストア前にデータベースを削除する必要があります。
RDS for Oracleで使用可能な管理ユーザーは、インスタンス起動時に指定したユーザーになります。オンプレミス環境ではおなじみであるSYSユーザー、SYSTEMユーザーでログインすることはできません。
また、使用できる権限も制限されています。
The Oracle database engine uses role-based security. A role is a collection of privileges that can be granted to or revoked from a user. A predefined role, named DBA, normally allows all administrative privileges on an Oracle database engine. The following privileges are not available for the DBA role on an Amazon RDS DB instance using the Oracle engine:
- Alter database
- Alter system
- Create any directory
- Drop any directory
- Grant any privilege
- Grant any role
上記のとおり、ALTER DATABASE権限やALTER SYSTEM権限がないですが、 ALTER SYSTEM FLUSH SHARED_POOL; や ALTER SYSTEM KILL SESSION 'sid, serial#' IMMEDIATE; を実行したくなる場合もあるでしょう。そのために、rdsadmin_utilというパッケージが用意されています。
rdsadmin_utilパッケージが提供するプロシージャを実行することで、ALTER DATABASE権限やALTER SYSTEM権限が必要な一部の管理作業を間接的に実行できます。
また、厳密には管理作業ではないかもしれませんが、hang analyzeや system stateといった障害診断情報 も取得できるようです。
上記の通り、ALTER DATABASE権限は使用できません。また、rdsadmin_utilパッケージにも該当する機能はなさそうなので、切り替えはできないと思われます。また、可用性を高めたデータベースサービスを提供するという目的からも、常にアーカイブログモードで運用するという考え方が自然なように思えます。
Oracle DatabaseにおけるDR実装で一般的に使用されるのはData Guardです。しかし、RDS for OracleはData Guardには対応していません。
また、Data GuardはOracle Database Enterprise Edition限定の機能ですが、Multi AZはStandard Editionでも使用できる位置づけになっています。したがって、Multi AZはData Guard以外の方法を用いて実装されていると考えられます。
実はMulti AZの実装方式については、私が参加させていただいた JAWS Festa 2013 大阪のUnconferenceで話題になりました。モデレータの大島さんに教えていただいたのですが、どうやら共有ディスクを用いたActive-StandbyのHA構成に類似した構成で実装されているように見えます。これは、フェイルオーバーを手動で実行したときのアラートログの出力内容から判断しています。(フェイルオーバー後、インスタンスでクラッシュリカバリが実行された後、インスタンスが正常起動する)
"DB Parameter Group"と呼ばれる複数の初期化パラメータに関するテンプレート化された設定が用意されており、DB Parameter Groupをカスタマイズすることで、初期化パラメータの設定を変更できるようになっています。
DB Parameter Groupに含まれる初期化パラメータの一部は、RDS for Oracle 特有と思われる置換変数のようなものが含まれています。たとえば、audit_file_dest は、DB Parameter Groupの画面上では、"/rdsdbdata/admin/{dbName}/adump"として定義されており、変数を含むテンプレート化された値となっています。
"Instnace"の"Logs"からアクセスできます。AWSのコンソールから確認することもできますし、ファイルとしてダウンロードすることもできます。
また、作成済みの外部表を介して参照することもできるようです。
You can access Oracle alert logs, audit files, and trace files by using the Amazon RDS console or APIs. These files are retained for seven days by default.
ということで、7日間保持されるようです。基本的にメンテナンスの必要はなさそうです。
手動での削除方法も用意されているようですが・・・・
SQL> exec rdsadmin.manage_tracefiles.refresh_tracefile_listing; PL/SQLプロシージャが正常に完了しました。 SQL> SELECT FILENAME FROM rdsadmin.tracefile_listing; FILENAME -------------------------------------------------------------------------------- ORCL_mman_2613.trm : ORCL_mmon_3113.trm alert_ORCL.log ORCL_arc3_3217.trm ORCL_mmon_3113.trc ORCL_ckpt_3107.trm ORCL_ora_2748.trc ORCL_arc1_3211.trm ORCL_dbw0_2615.trc bdump-file-listing ORCL_dbrm_2609.trc 46行が選択されました。 SQL> exec rdsadmin.manage_tracefiles.purge_tracefiles('ORCL_mmon*'); BEGIN rdsadmin.manage_tracefiles.purge_tracefiles('ORCL_mmon*'); END; * 行1でエラーが発生しました。: ORA-20102: Error in manage_tracefiles.rm_tracefiles. ORA-20101: Error trying to run rm_tracefiles in /rdsdbbin/scripts/rm-tracefile ORA-06512: "SYS.MANAGE_TRACEFILES", 行246 ORA-06512: "RDSADMIN.MANAGE_TRACEFILES", 行41 ORA-06512: 行1
うまくいきませんでした。
DataPumpはサポートされていますが、Network Modeのみ(NETWORK_LINK オプション)のみがサポートされています。
以下の記載からわかる通り、DIRECTORYオブジェクトの作成はサポートされていません(作成する権限がありません)。
The Oracle database engine uses role-based security. A role is a collection of privileges that can be granted to or revoked from a user. A predefined role, named DBA, normally allows all administrative privileges on an Oracle database engine. The following privileges are not available for the DBA role on an Amazon RDS DB instance using the Oracle engine:
- Alter database
- Alter system
- Create any directory
- Drop any directory
- Grant any privilege
- Grant any role
よって、DIRECTORYオブジェクトを介してDBサーバのローカルファイルシステムへダンプファイルを出力または入力するような、通常のDataPumpの使用形態は基本的にサポートされないことになります。これはRDSの制限からある意味理解できるものではあります。
Network ModeのDataPumpについては、
明確な記載は確認できていませんが、ローカルファイルシステムにアクセスできない、 ディレクトリオブジェクトを作成できないことから、使用できないと判断してよさそうです。