はじめまして、マツナミと申します。
普段は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>
これらの詳細な使い方については公式サイトをご確認ください。
とりあえず今回はこれくらいで。
次回は初期化パラメータやREDOログなど、Oracleの構成について見ていきたいと思います。