株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

JAWS Festa 2013大阪に参加してきました+Amazon RDS for Oracle Databaseの調べものメモ

しばらく時間が経ってしまいましたが、JAWS Festa 2013 大阪でOracle Database on AWSのアンカンファレンスに参加してきました。

アンカンファレンスの様子については、参加いただいた植木さんに詳細なレポート(+いい写真!)をまとめていただいています。植木さんありがとうございます!

アンカンファレンスで話したこと、 Amazon RDS for Oracle Databaseに触ってみました&気になることメモで書いたことなどについて、マニュアルなどを参考に調べてみた結果や、アンカンファレンスで大島さんから教えていただいたことを一応まとめておきたいと思います。

以下の資料を参考にしました。

データベースをどうやってバックアップするか

"Instance Actions" -> "Take DB Snapshot"でインスタンス稼働中にバックアップを取得できます。

rds_oracle_take_db_snapshot.jpg

アラートログを確認すると、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"でリストアできるようです。

rds_oracle_restore_snapshot.jpg

なお、同名のデータベースが存在している場合は、"DB Instance already exists"というエラーが発生し、リストアできません。リストア前にデータベースを削除する必要があります。

rds_oracle_restore_db_instance_already_exists.jpg

SYSユーザーのみ実行可能な管理作業はどうやって行うのか

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パッケージにも該当する機能はなさそうなので、切り替えはできないと思われます。また、可用性を高めたデータベースサービスを提供するという目的からも、常にアーカイブログモードで運用するという考え方が自然なように思えます。

Multi AZの実装方式は?

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をカスタマイズすることで、初期化パラメータの設定を変更できるようになっています。

rds_oracle_option_groups.jpg

DB Parameter Groupに含まれる初期化パラメータの一部は、RDS for Oracle 特有と思われる置換変数のようなものが含まれています。たとえば、audit_file_dest は、DB Parameter Groupの画面上では、"/rdsdbdata/admin/{dbName}/adump"として定義されており、変数を含むテンプレート化された値となっています。

ログファイル、監査ファイルへどうやってアクセスするのか

"Instnace"の"Logs"からアクセスできます。AWSのコンソールから確認することもできますし、ファイルとしてダウンロードすることもできます。

rds_oracle_logs.jpg

また、作成済みの外部表を介して参照することもできるようです。

ログファイル、監査ファイルのメンテナンスはどうやって実行するのか、そもそもメンテナンスする必要があるのか

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のダンプファイルにどうやってアクセスするか

DataPumpはサポートされていますが、Network Modeのみ(NETWORK_LINK オプション)のみがサポートされています。

以下の記載からわかる通り、DIRECTORYオブジェクトの作成はサポートされていません(作成する権限がありません)。

  • Security Oracle on Amazon RDS - Amazon Relational Database Service http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.RestrictedDBAPrivileges
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については、

に説明があります。システム構成の観点では、データインポート用のOracleインスタンスが別途必要であり、かつ、RDSインスタンスとデータインポート用のOracleインスタンスの間にデータベースリンクが設定可能である必要があります。セキュリティやネットワーク帯域のことを考慮すると、実際的には、EC2にデータインポート用のOracleインスタンスを作成し、あらかじめこのインスタンスに対してデータを移行しておく必要があることになるでしょう。ちょっと面倒ではあります。

外部表は使用できるのか

明確な記載は確認できていませんが、ローカルファイルシステムにアクセスできない、 ディレクトリオブジェクトを作成できないことから、使用できないと判断してよさそうです。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ