ablog

不器用で落着きのない技術者のメモ

Oracle Databse 運用手順

Oracle Database を運用するときに使う手順をリストアップしてみた。
別途、マニアックなコマンドのまとめをしたくなってきた。oerr、Prelim Connection、oradebug、bbed とか。ほとんど使ったことないので、調べがてらに。

環境・前提条件

  • Linux
  • Oracle10g
  • シングルインスタンス(RACではない)
  • OS起動時に、
    • データベース・リスナー・EM Database Control を自動起動しない
    • 共有ストレージを自動マウントしない

手順

凡例
$ command ... : oracle ユーザで OS コマンドを実行
# command ... : root ユーザで OS コマンドを実行
SQL> command ... : sqlplus で sqlplus コマンドまたは SQL を実行
データベース起動・停止
  • 起動
$ sqlplus / as sysdba
SQL> startup
SQL> exit
$ lsnrctl start
  • 停止
$ emctl status dbconsole # EM Database Control が起動していないか確認する
$ emctl stop dbconsole   # 起動している場合は停止する
$ lsnrctl stop
$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
Enterprise Manager Database Control の起動・停止
  • 起動
$ emctl start dbconsole
  • 停止
$ emctl stop dbconsole
OS起動・停止
  • 起動
# mount -t ext3 -o data=ordered,noatime /dev/sdb1 /u02
# mount
# su - oracle
$ sqlplus / as sysdba
SQL> startup
SQL> exit
$ lsnrctl start
  • 停止
$ emctl status dbconsole # EM Database Control が起動していないか確認する
$ emctl stop dbconsole   # 起動している場合は停止する
$ lsnrctl stop
$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
$ su -
# shutdown -h now
稼働状況確認
  • データベースの状態を確認する。
SQL> set linesize 200
SQL> col host_name for a10
SQL> select host_name, instance_name, status from v$instance
  • リスナーの状態を確認する。
$ lsnrctl status
$ lsnrctl services lsnrctl services
  • Enterprise Manager Database Control の状態を確認する。
$ emctl status dbconsole
  • プロセスを確認する。
$ ps -f -U oracle 
  • アラートログを確認する。
$ sqlplus / as sysdba
SQL> show parameter background_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------------
background_dump_dest                 string      /u01/app/oracle/admin/orcl/bdump
SQL> exit
$ cd /u01/app/oracle/admin/orcl/bdump
$ perl -wnle 'BEGIN{%h=();}/([A-Z]{3}-[0-9]+)/ and $h{$1}++;END{map{print "$_:$h{$_}"} keys %h;}' alert_$ORACLE_SID.log
ORA-00001:15
ORA-01400:20
ORA-12899:7
  ...
$ less alert_$ORACLE_SID.log 
  • バックグラウンドプロセスのトレースファイルを確認する。
$ sqlplus / as sysdba
SQL> show parameter background_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------------
background_dump_dest                 string      /u01/app/oracle/admin/orcl/bdump
SQL> exit
$ cd /u01/app/oracle/admin/orcl/bdump
$ ls
$ less $ORACLE_SID_<プロセス名>_<PID>.trc
  • サーバープロセスのトレースファイルを確認する。
$ sqlplus / as sysdba
SQL> show parameter user_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /u01/app/oracle/admin/orcl/udump
SQL> exit
$ cd /u01/app/oracle/admin/orcl/udump
$ ls
$ less $ORACLE_SID_<プロセス名>_<PID>.trc
  • リスナーログを確認する
$ lsnrctl status
...
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
...
$ cd /u01/app/oracle/product/10.2.0/db_1/network/log
$ perl -wnle 'BEGIN{%h=();}/([A-Z]{3}-[0-9]+)/ and $h{$1}++;END{map{print "$_:$h{$_}"} keys %h;}' listener.log
  • データベースに接続しているセッションを確認する。
$ sqlplus / as sysdba
SQL> set pagesize 1000
SQL> set linesize 250	
SQL> select machine||' '||username from v$session order by 1;
  • 無効なオブジェクトがないか確認する。
$ sqlplus / as sysdba
SQL> set pagesize 1000
SQL> set linesize 250	
SQL> select object_name from dba_objects where status = 'INVALID' order by 1;
  • 表領域の使用率を確認する。
$ sqlplus / as sysdba
SQL> set pagesize 1000
SQL> set linesize 250
SQL> select total.tablespace_name, total.s/1024/1024 "total(MB)", (total.s-free.s)/1024/1024 "used(MB)", free.s/1024/1024 "free(MB)", (1-free.s/total.s)*100 "pctused(%)"
from (select tablespace_name, sum(bytes) s from dba_data_files group by tablespace_name) total,
(select tablespace_name, sum(bytes) s from dba_free_space group by tablespace_name) free
where total.tablespace_name = free.tablespace_name(+);