Amazon RDS for Oracle入門(1)

はじめまして、マツナミと申します。

普段はOracle Databaseの導入を主軸として、ITインフラの設計・構築などの仕事をしています。
そんなわけで、データベース周りのことについてこのブログに書いていきたいと思います。

今回はAmazon RDS for Oracleについて、オンプレ環境のOracleとの違いをテーマとします。

対象読者は、オンプレでOracleDBの運用などをやっていてRDSへの移行を検討しているDBAです。
もうすでにRDSバリバリ使ってます!という方に有益な情報はたぶんありません。あしからず。

なお、以下のSQL結果などは11.2.0.4 Standard Editionをベースとしています。

パラメータやユーザ情報などは12cでは異なりますのでご了承ください。

RDS for Orcleを使ったときの制限

RDS for Oracleはマネージドサービスのため、バックアップの自動化など多数の恩恵が得られます。

ただ、その代わりにオンプレでは普通にできていたことがRDSではできなくなるといった制限がいくつかあります。代表的なものは以下のようになります。

ホストOSへのログイン不可

オンプレと比較したとき、これがシステム構成に最も影響する項目だと思います。

中小規模のシステムではバッチ処理をDBサーバ上で実行しているケースも少なくないと思いますが、そういったシステムの場合、別サーバにOracle Clientを導入してバッチ処理を実行するなど検討しないといけません。

また、アプリケーションだけでなく、DBサーバに監視エージェントを入れて表領域使用率監視のシェルを実行するといったシステムはよくあると思いますがそういったことも同様に不可です。

別サーバで実行するか代替手段を考えるか、ということになります。

DataPump Exportを実行したときはダンプファイルがDBのローカルディスクに出力されるけどどうすんの?という疑問を抱く方もいると思いますが、そこについては次回以降触れます。

SYS、SYSTEMユーザでのログイン不可

SYSユーザでログインできないということは、オンプレ環境で何度も実行した
sqlplus / as sysdbaとかstartupとかshutdown immediateなどは 実行する機会がないということになります、さびしい話ですね。

SYSが使えないならどうやってDBを管理するの?といった疑問が生まれますが管理用のユーザが初期状態で作成されるので、それを利用します。

RDS作成時点のユーザを確認してみましょう。

SQL> select username from dba_users order by 1;

USERNAME
------------------------------------------------------------
APPQOSSYS
CTXSYS
DBMASTER
DBSNMP
DIP
OUTLN
RDSADMIN
SYS
SYSTEM

9行が選択されました。

SQL>

今回検証で利用した環境ではDBMASTERというユーザ名でマスターユーザを作成しました。

また、それ以外ではOracleビルトインユーザ以外にRDSADMINというユーザが作成されています。 これはRDS for Oracleでは必ずこの名前で作成されるものです。

DBを管理するときの流れですが、ログインするのはマスターユーザを利用します。
マスターユーザは作成時点で複数のロール・権限が付与されています。

SQL> select granted_role from dba_role_privs where grantee='DBMASTER' order by 1;

GRANTED_ROLE
------------------------------------------------------------
AQ_ADMINISTRATOR_ROLE
AQ_USER_ROLE
CONNECT
CTXAPP
DBA
EXECUTE_CATALOG_ROLE
RDS_MASTER_ROLE
RECOVERY_CATALOG_OWNER
RESOURCE
SELECT_CATALOG_ROLE

10行が選択されました。

SQL>

DBAロールが付与されているのは心強いですね。

このロールが付与されているならほとんどやり放題じゃない?という気になります。
が、実際にはRDS上のDBAロールはオンプレ環境と完全に同じではなく、以下のシステム権限がロールからREVOKEされてます。

SQL> select privilege from dba_sys_privs where grantee='DBA' minus select privil
ege from dba_sys_privs@RDSLINK where grantee='DBA';

PRIVILEGE
--------------------------------------------------------------------------------
ALTER DATABASE
ALTER SYSTEM
CREATE ANY DIRECTORY
CREATE EXTERNAL JOB
GRANT ANY PRIVILEGE
GRANT ANY ROLE
READ ANY FILE GROUP

7行が選択されました。

上記はオンプレDBからRDSにDBLINKを作成して、権限の差分を表示したものです。 システム構成を大きく変えるような(マネージドサービスの前提を崩してしまいそうな)システム権限はREVOKEされてると考えられます。 ちなみにシステム権限以外に付与されたロールにも違いがありますので気になる方はぜひ調べてみてください。

ALTER SYSTEM、ALTER DATABASEの実行不可

上記のとおり、マスターユーザにDBAロールが付与されますが、DBAロールからALTER SYSTEM、ALTER DATABASE権限がREVOKEされているためこれらSQLをマスター用ユーザからは実行できません。

その代わり、RDSADMINユーザのパッケージ、ストアドプロシージャを実行することになります。
RDSADMINユーザには以下のとおり、これらSQLの権限が付与されていますので、ユーザはRDSADMINのストアドを経由して、システム構成を操作できる構成になっています

SQL> select grantee,privilege from dba_sys_privs where privilege in ('ALTER SYSTEM','ALTER DATABASE');

GRANTEE                        PRIVILEGE
------------------------------ ------------------------------
SYS                            ALTER DATABASE
SYS                            ALTER SYSTEM
RDSADMIN                       ALTER DATABASE
RDSADMIN                       ALTER SYSTEM

SQL>

RDSADMINのストアドやトリガーにどんな名前のものがあるかは以下SQLで確認できます。

SQL> select distinct name from dba_source where owner='RDSADMIN' order by 1;

NAME
------------------------------------------------------------
GRT_MST
MANAGE_TRACEFILES
MANAGE_TRACEFILES_CTX
OBJ_NAME_TYPE
RDSADMIN
RDSADMIN_DBMS_IJOB
RDSADMIN_DBMS_REPAIR
RDSADMIN_MASTER_UTIL
RDSADMIN_PASSWORD_VERIFY
RDSADMIN_UTIL
RDS_DDL_TRIGGER
RDS_DDL_TRIGGER2
RDS_FILE_UTIL
RDS_GRANT_TRIGGER
SYS_PLSQL_14232_36_1
SYS_PLSQL_14232_44_1
SYS_PLSQL_14232_54_1
SYS_PLSQL_14232_9_1
SYS_PLSQL_14232_DUMMY_1
T_RDS_MASTER_LOG
T_RDS_SYS_PRIVS

21行が選択されました。

SQL>

これらの詳細な使い方については公式サイトをご確認ください。

Oracle DB インスタンスの一般的な DBA タスク

とりあえず今回はこれくらいで。

次回は初期化パラメータやREDOログなど、Oracleの構成について見ていきたいと思います。

 

 

 

アプリケーション開発バナー