2章 データベースの管理
本章ではデータベースの管理方法についてご紹介していきます。
データベースで使用するツールから初期化パラメータの確認、変更方法についてご紹介していきます。
データベース管理で使用するツール
データベース管理者はデータベース上の様々な作業を効率よく、短時間でこなしていく必要があります。
データベース障害やデータのロードなど短時間で完了できない場合、そのシステムに甚大な影響を与えてしまう可能性もあります。
作業を効率よく実施するためにOracleは様々なツールを提供しています。
SQL*Plus
SQL*PlusはCUIベースでDB管理を実施するためのツールです。
SQL*PlusからSQLを使用して、DB操作を行うことができます。
  [構文] 一般ユーザでのログイン
 $ sqlplus ユーザ名/パスワード[@ネットサービス名]
一般ユーザのログイン方法はユーザ名、パスワードを指定するだけです。
ネットサービス名はリモートにデータベースが存在する場合は指定します。
続いて管理者ユーザとしてログインするには以下の構文を実施します。
SYSDBA権限はデータベース操作はすべて実行できる強力な権限です。
  [構文] SYSDBA権限でのログイン (OS認証)
 $ sqlplus / as sysdba
上記はOSグループがdbaかどうかで認証を行います。パスワードは不要です。
グループの指定はOUIのインストール画面で選択できます。
  [構文] SYSDBA権限でのログイン (パスワード認証)
 $ sqlplus sys/pass@ネットサービス名 as sysdba
上記はパスワード認証であり、このパスワードファイルは$ORACLE_HOME/dbs配下に存在します。
[補足] パスワード認証
一般ユーザのパスワードはDBのデータディクショナリに格納されますが、
sysのパスワードはDB内ではなくパスワードファイルで管理されます。
理由は管理者はDBがOPENされていない状態でもDBにログインする必要があり、
DBがOPENされていないとデータディクショナリにアクセスできないので、DBの外部でパスワードを管理する必要があります。
リモートにDBサーバが存在する場合は、上記の様に接続文字列(ローカルネーミング、簡易接続etc)が必要です。
こちらの内容は「初級コース」で詳しく紹介しています。
Enteprise Manager Express
Enterprise Manager ExpressはGUIでデータベース管理を行うツールです。
Webブラウザからアクセスし、マウスで表領域の作成等が行えます。
Webブラウザから以下のURLを入力します。
https://DBサーバのホスト名:5500/em
初期化パラメータを変更する
前述したツールを使用して初期化パラメータを確認していきましょう。
今回はSQL*Plusを使用していきます。
  SQL> show parameter
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------------
  O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE
  active_instance_count                integer
  aq_tm_processes                      integer     1
  archive_lag_target                   integer     0
  asm_diskgroups                       string
  …
  
初期化パラメータを表示するには「show parameter」を使用します。
すべてのパラメータを覚える必要はありません。しかし設定するパラメータに関しては、マニュアルを参照し、
どのような動作になるのか調べましょう。
特定のパラメータだけを確認したい場合は、検索したい文字列を指定します。
  SQL> show parameter undo
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- --------------
  temp_undo_enabled                    boolean     FALSE
  undo_management                      string      AUTO
  undo_retention                       integer     900
  undo_tablespace                      string      UNDOTBS1
  
次に初期化パラメータの変更する場合は以下の構文を使用します。
  [構文] 初期化パラメータの変更方法
 SQL> ALTER SYSTEM SET パラメータ名 = 値
      [ SCOPE = MEMORY | SPFILE | BOTH ];
SCOPE句は適用する範囲を指定します。デフォルトはBOTHです。
SCOPEで指定できる項目は以下の通り。
| MEMORY | 指定した値に変更。DB再起動後は元の値に戻る。 | 
| SPFILE | 指定した値はDB再起動後に反映。 | 
| BOTH | 指定した値に変更。DB再起動後も指定した値のまま。 | 
上記のSPFILE,BOTHはPFILE(テキスト)の場合は使用できません。
変更するパラメータには動的に変更できるもの(DB再起動が必要ない)、静的なもの
(DB再起動が必要)に分かれます。確認方法はSQLで確認ができます。
  SQL> select name, issys_modifiable from v$parameter;
  NAME                                ISSYS_MOD
  ----------------------------------- ---------
  lock_name_space                     FALSE
  processes                           FALSE
  sessions                            IMMEDIATE
  timed_statistics                    IMMEDIATE
  timed_os_statistics                 IMMEDIATE
  resource_limit                      IMMEDIATE
  … 
  
| IMMEDIATE | MEMORY,SPFILE,BOTHが可能。 | 
| DEFERRED | MEMORY,SPFILE,BOTHが可能。 | 
| FALSE | SPFILEのみ。DBの再起動が必要。 | 
では試しにデータベースバッファキャッシュのサイズを変更してみます。
  SQL> show parameter db_cache_size
  NAME                       TYPE        VALUE
  -------------------------- ----------- ---------------
  db_cache_size              big integer 0
  SQL> select name, issys_modifiable from v$parameter
    2> where name = 'db_cache_size';
  NAME                 ISSYS_MOD
  -------------------- ---------
  db_cache_size        IMMEDIATE
  SQL> alter system set db_cache_size = 50M scope=memory;
  System altered.
  SQL> show parameter db_cache_size
  NAME                       TYPE        VALUE
  -------------------------- ----------- --------------------
  db_cache_size              big integer 52M
  
変更は出来ましたが、設定した50Mではありません。。
これはOracleのメモリ割り当てがグラニュルという単位で領域を割り当てるからです。
SGAの合計サイズが1GB以下の場合、グラニュルサイズは4MBです。
その為、50Mと設定してもグラニュル単位となり、切上げられて52MBとなります。
SGAの合計サイズが1GB以上の場合はグラニュルサイズは8MBとなります。
管理ビューからDB情報を確認する
Oracleには様々な管理情報を保持しており、DBAはその情報を使用して、
性能問題やエラー内容を調査します。
・動的パフォーマンスビュー
・データディクショナリ
動的パフォーマンスビュー
動的パフォーマンスビューはv$から始まるビュー名で、情報は動的に変更されます。
例えばDB接続しているユーザを確認したい場合、v$sessionという動的パフォーマンスビューで
確認できます。この情報はDBユーザのセッションが終了すれば、動的に更新され、
常にリアルタイムの情報を確認できます。
またこれらの情報はメモリ上にしか存在しない為、
データベースが再起動するとデータは消えてしまいます。
データディクショナリ
データディクショナリはDBA,ALL,USERなどの接頭辞から始まるビュー名で、
SYSTEM表領域に存在します。例えばDBユーザが保持しているテーブルの一覧などを確認したい場合は、
DBA_TABLESというデータディクショナリで確認できます。
またこの情報はテーブルを削除したときのみ更新されるため、静的と呼ばれています。
この二つのビューを使用することで、様々なデータベースの情報を知ることができます。
ただこのビューは合わせて3000以上あるため、どのディクショナリにどんな列を格納しているのかは、
マニュアルを確認してください。
では実際にこれらのビューを確認していきましょう。
動的パフォーマンスビューのV$INSTANCEはデータベースの状態やバージョン、DB起動時間などを確認できます。
  SQL> select instance_name,status,version from v$instance;
  INSTANCE_NAME    STATUS       VERSION
  ---------------- ------------ -----------------
  orcl             OPEN         12.1.0.2.0
  
STATUSがOPENである為、データベースは起動してることがわかります。
動的パフォーマンスビューのV$SESSIONビューは現在DB接続しているセッション情報を確認できます。
  SQL> select username,status from v$session;
  USERNAME                       STATUS
  ------------------------------ --------
  SYS                            ACTIVE
  TOM                            ACTIVE
  
DBログからDB情報を確認する
DBの情報はログファイルやトレースファイルからも確認することができます。
DB障害やBugなどが発生した場合、ログから調査を行ったほうが解決が早い可能性があります。
・アラートログファイル
・トレースファイル
アラートログファイル
アラートログには以下の情報が記載されます。
・エラー情報
  すべてのORAエラー情報
・管理操作情報
  SQL*PlusコマンドのSTARTUP、SHUTDOWN、ARCHIVE LOG、および
  RECOVERなどの実行時間とコマンド内容
・その他のイベント情報
  DBを起動停止した時間やDBのエラー情報、チェックポイントやログスイッチなど
  のDBイベントがアラーとログに記載されます
トレースファイル
  トレースファイルは各プロセス(DBWやSMONなど様々なプロセス)がイベント情報が保存されるファイルです。
  基本的に定期的に確認することはないですが、DBに問題があるときなどはトレースファイルにエラーが出力されていないか確認します。
 アラートログ、トレースログは以下のディレクトリに配置されています。
 $ORACLE_BASE/diag/rdbms/DB名/SID名/trace
 
 アラートログ
 alert_SID名.log
 
 トレースファイル
 SID名_プロセス名.trc
 
 たとえばDBを起動したときに出力されるログです。
 
 $ tail -30 $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log
 
  Fri Nov 04 20:02:38 2016
  Thread 1 advanced to log sequence 9 (LGWR switch)
    Current log# 3 seq# 9 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log
  Fri Nov 04 20:02:40 2016
  Archived Log entry 21 added for thread 1 sequence 8 ID 0x56667623 dest 1:
  Fri Nov 04 21:45:54 2016
  Warning: VKTM detected a time drift.
  Time drifts can result in an unexpected behavior such as time-outs. 
  Please check trace file for more details.
  Fri Nov 04 21:58:25 2016
  ALTER SYSTEM SET db_cache_size=10M SCOPE=MEMORY;
  Fri Nov 04 22:00:01 2016
  Setting Resource Manager plan SCHEDULER[0x4447]:DEFAULT_MAINTENANCE_PLAN 
  via scheduler window
  Setting Resource Manager CDB plan DEFAULT_MAINTENANCE_PLAN via parameter
  Fri Nov 04 22:00:07 2016
  Begin automatic SQL Tuning Advisor run for special tuning task  
  "SYS_AUTO_SQL_TUNING_TASK"
  End automatic SQL Tuning Advisor run for special tuning task  
  "SYS_AUTO_SQL_TUNING_TASK"
  Fri Nov 04 22:02:08 2016
  ALTER SYSTEM SET db_cache_size=50M SCOPE=MEMORY;
  Fri Nov 04 22:03:29 2016
  Thread 1 cannot allocate new log, sequence 10
  Private strand flush not complete
    Current log# 3 seq# 9 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log
  Fri Nov 04 22:03:32 2016
  Thread 1 advanced to log sequence 10 (LGWR switch)
    Current log# 1 seq# 10 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log
  Fri Nov 04 22:03:34 2016
  Archived Log entry 22 added for thread 1 sequence 9 ID 0x56667623 dest 1:
  
アラートログにはこのように色々な情報が出力されています。
本章は以上となります。今回はデータベースの管理の基礎についてご紹介してまいりました。