linux中oracle的日常維護命令
2014-06-11 |標簽: oracle linux 
  1 檢查Oracle的進程
  
  [[email protected] ~]$ ps -ef|grep "ora_"|grep -v grep
  
  oracle    2791     1 0 17:22 ?        00:00:00 ora_pmon_ORCL
  
  oracle    2793     1 0 17:22 ?        00:00:00 ora_psp0_ORCL
  
  oracle    2795     1 0 17:22 ?        00:00:00 ora_mman_ORCL
  
  oracle    2797     1 0 17:22 ?        00:00:00 ora_dbw0_ORCL
  
  ......
  
  在檢查Oracle的進程命令輸出后,輸出顯示至少應包括以下一些進程:
  
  • Oracle寫數據文件的進程,輸出顯示為:“ora_dbw0_ORCL”
  
  • Oracle寫日志文件的進程,輸出顯示為:“ora_lgwr_ORCL”
  
  • Oracle監聽實例狀態的進程,輸出顯示為:“ora_smon_ORCL”
  
  • Oracle監聽客戶端連接進程狀態的進程,輸出顯示為:“ora_pmon_ORCL”
  
  • Oracle進行歸檔的進程,輸出顯示為:“ora_arc0_ORCL”
  
  • Oracle進行檢查點的進程,輸出顯示為:“ora_ckpt_ORCL”
  
  • Oracle進行恢復的進程,輸出顯示為:“ora_reco_ORCL”
  
  2.查看數據庫的實例:
  
  SQL> select instance_name,status,version,database_status from v$instance;
  
  INSTANCE_NAME    STATUS       VERSION           DATABASE_STATUS
  
  ---------------- ------------ ----------------- -----------------
  
  ORCL             OPEN         10.2.0.1.0        ACTIVE
  
  其中“STATUS”表示Oracle當前的實例狀態,必須為“OPEN”;“DATABASE_STATUS”表
  
  示Oracle當前數據庫的狀態,必須為“ACTIVE”。
  
  3 查看數據庫的日志模式,打開模式
  
  SQL> select name,log_mode,open_mode from v$database;
  
  NAME      LOG_MODE     OPEN_MODE
  
  --------- ------------ ----------
  
  ORCL      ARCHIVELOG   READ WRITE
  
  其中“LOG_MODE”表示Oracle當前的歸檔方式。“ARCHIVELOG”表示數據庫運行在歸檔
  
  模式下,“NOARCHIVELOG”表示數據庫運行在非歸檔模式下。在我們的系統中數據庫必須運
  
  行在歸檔方式下。
  
  4 查看數據庫alert_SID.log 中的ora-的錯誤信息:
  
  [[email protected] ~]$ cat /u01/app/oracle/admin/orcl/bdump/alert_ORCL.log|grep -i ora-
  
  ORA-1126 signalled during: alter database archivelog ...
  
  ORA-1126 signalled during: alter database archivelog...
  
  ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
  
  ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
  
  查alert_SID.log中的err的信息:
  
  [[email protected] ~]$ cat $ORACLE_BASE/admin/orcl/bdump/alert_ORCL.log|grep -i err
  
  Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo01.log
  
  Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo02.log
  
  查alert_SID.log的fail的信息:
  
  [[email protected] ~]$ cat $ORACLE_BASE/admin/orcl/bdump/alert_ORCL.log|grep -i fail
  
  PMON failed to acquire latch, see PMON dump
  
  PMON failed to acquire latch, see PMON dump
  
  PMON failed to acquire latch, see PMON dump
  
  5.檢查控制文件狀態:
  
  SQL> select status,name from v$controlfile;
  
  STATUS NAME
  
  ------- --------------------------------------------------
  
  /u01/app/oracle/oradata/orcl/control01.ctl
  
  /u01/app/oracle/oradata/orcl/control02.ctl
  
  /u01/app/oracle/oradata/orcl/control03.ctl
  
  輸出結果應該有3條以上(包含3條)的記錄,“STATUS”應該為空。狀態為空表示控制
  
  文件狀態正常。
  
  6 查詢日志狀態
  
  SQL> select group#,status,member from v$logfile;
  
  GROUP# STATUS MEMBER
  
  ---------- ------- --------------------------------------------------
  
  2         /u01/app/oracle/oradata/orcl/redo02.log
  
  1 STALE   /u01/app/oracle/oradata/orcl/redo01.log
  
  3 STALE   /u01/app/oracle/oradata/orcl/redo03.log
  
  輸 出結 果應該 有 3 條以上 (包 含 3 條)記 錄, “ STATUS ” 應該為 非 “ INVALID” , 非“DELETED”。
  
  7   查詢數據狀態:
  
  SQL> select file#,status,name from v$datafile;
  
  FILE# STATUS NAME
  
  ---------- ------- --------------------------------------------------
  
  1 SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf
  
  2 ONLINE /u01/app/oracle/oradata/orcl/undotbs01.dbf
  
  3 ONLINE /u01/app/oracle/oradata/orcl/sysaux01.dbf
  
  4 ONLINE /u01/app/oracle/oradata/orcl/users01.dbf
  
  5 ONLINE /u01/app/oracle/oradata/orcl/example01.dbf
  
  6 ONLINE /u01/app/oracle/oradata/orcl/perfstat.dbf
  
  7 ONLINE /u01/app/oracle/oradata/orcl/risenet.dbf
  
  7 rows selected.
  
  “ONLINE"表示正常在線狀態
  
  8 查詢表空間狀態:
  
  SQL> select tablespace_name,status from dba_tablespaces;
  
  TABLESPACE_NAME                STATUS
  
  ------------------------------ ---------
  
  SYSTEM                         ONLINE
  
  UNDOTBS1                       ONLINE
  
  SYSAUX                         ONLINE
  
  TEMP                           ONLINE
  
  USERS                          ONLINE
  
  EXAMPLE                        ONLINE
  
  PERFSTAT                       ONLINE
  
  RISENET                        ONLINE
  
  8 rows selected.
  
  “ONLINE”表示正常在線狀態
  
  9檢查Oracle所有回滾段的狀態
  
  SQL> select segment_name,status from dba_rollback_segs;
  
  SEGMENT_NAME                   STATUS
  
  ------------------------------ ----------------
  
  SYSTEM                         ONLINE
  
  _SYSSMU10$                     ONLINE
  
  _SYSSMU9$                      ONLINE
  
  _SYSSMU8$                      ONLINE
  
  _SYSSMU7$                      ONLINE
  
  _SYSSMU6$                      ONLINE
  
  _SYSSMU5$                      ONLINE
  
  _SYSSMU4$                      ONLINE
  
  _SYSSMU3$                      ONLINE
  
  _SYSSMU2$                      ONLINE
  
  _SYSSMU1$                      ONLINE
  
  11 rows selected.
  
  10 檢查Oracle初始化文件中相關的參數值
  
  SQL> l
  
  1* select resource_name,current_utilization,max_utilization,initial_allocation,limit_value from v$resource_limit
  
  SQL> /
  
  RESOURCE_NAME   CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
  
  --------------- ------------------- --------------- ---------- ----------
  
  processes                        20              30        150        150
  
  sessions                         25              33        170        170
  
  enqueue_locks                    14              22       2300       2300
  
  enqueue_resourc                  14              37        968 UNLIMITED
  
  es
  
  ges_procs                         0               0          0          0
  
  ges_ress                          0               0          0 UNLIMITED
  
  ges_locks                         0               0          0 UNLIMITED
  
  ges_cache_ress                    0               0          0 UNLIMITED
  
  ges_reg_msgs                      0               0          0 UNLIMITED
  
  RESOURCE_NAME   CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
  
  --------------- ------------------- --------------- ---------- ----------
  
  ges_big_msgs                      0               0          0 UNLIMITED
  
  ges_rsv_msgs                      0               0          0          0
  
  gcs_resources                     0               0          0          0
  
  gcs_shadows                       0               0          0          0
  
  dml_locks                         0              44        748 UNLIMITED
  
  temporary_table                   0               0 UNLIMITED UNLIMITED
  
  _locks
  
  transactions                      0              10        187 UNLIMITED
  
  branches                          0               0        187 UNLIMITED
  
  cmtcallbk                         0               1        187 UNLIMITED
  
  RESOURCE_NAME   CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
  
  --------------- ------------------- --------------- ---------- ----------
  
  sort_segment_lo                   0               1 UNLIMITED UNLIMITED
  
  cks
  
  max_rollback_se                  11              11        187      65535
  
  gments
  
  max_shared_serv                   1               1 UNLIMITED UNLIMITED
  
  ers
  
  parallel_max_se                   0               2         40       3600
  
  rvers
  
  RESOURCE_NAME   CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
  
  --------------- ------------------- --------------- ---------- ----------
  
  22 rows selected.
  
  11檢查Oracle各個表空間的增長情況
  
  SQL> l
  
  1 select
  
  2     A.tablespace_name,(1-(A.total)/B.total)*100 used_percent
  
  3     from
  
  4     (select tablespace_name,sum(bytes) total
  
  5             from dba_free_space group by tablespace_name) A,
  
  6     (select tablespace_name,sum(bytes) total
  
  7             from dba_data_files group by tablespace_name) B
  
  8*    where A.tablespace_name=B.tablespace_name
  
  SQL> /
  
  TABLESPACE_NAME                USED_PERCENT
  
  ------------------------------ ------------
  
  UNDOTBS1                              33.25
  
  SYSAUX                           99.0364583
  
  RISENET                               .0125
  
  USERS                                  62.5
  
  SYSTEM                           98.6067708
  
  EXAMPLE                               68.25
  
  PERFSTAT                            28.7625
  
  7 rows selected.
  
  12  檢查一些擴展異常的對象
  
  SQL> select segment_name,segment_type,tablespace_name,
  
  2      (extents/max_extents)*100 Percent
  
  3      from sys.DBA_segments
  
  4      where max_extents!=0 and (extents/max_extents)*100>=95
  
  5 order by percent;
  
  no rows selected
  
  如果有記錄返回,則這些對象的擴展已經快達到它定義時的最大擴展值。對于這些對象
  
  要修改它的存儲結構參數.
  
  13  檢查system表空間內的內容
  
  SQL> select distinct(owner) from dba_tables
  
  2 where tablespace_name='SYSTEM' and
  
  3 owner!='SYS' and owner!='SYSTEM'
  
  4 union
  
  5 select distinct(owner) from dba_indexes
  
  6 where tablespace_name='SYSTEM' and
  
  7 owner!='SYS' and owner!='SYSTEM';
  
  OWNER
  
  ------------------------------
  
  MDSYS
  
  OLAPSYS
  
  OUTLN
  
  如果有記錄返回,則表明system表空間內存在一些非system和sys用戶的對象。應該進一
  
  步檢查這些對象是否與我們應用相關。如果相關請把這些對象移到非System表空間,同時應
  
  該檢查這些對象屬主的缺省表空間值,
  
  14檢查對象的下一擴展與表空間的最大擴展值
  
  SQL> select a.table_name,a.next_extent,a.tablespace_name
  
  2      from all_tables a,
  
  3      (select tablespace_name,max(bytes) as big_chunk
  
  4      from dba_free_space group by tablespace_name) f
  
  5      where f.tablespace_name=a.tablespace_name
  
  6      and a.next_extent>f.big_chunk
  
  7      union
  
  8      select a.index_name,a.next_extent,a.tablespace_name
  
  9      from all_indexes a,
  
  10      (select tablespace_name,max(bytes) as big_chunk
  
  11      from dba_free_space
  
  12      group by tablespace_name) f
  
  13      where f.tablespace_name=a.tablespace_name
  
  14      and a.next_extent>f.big_chunk;
  
  no rows selected
  
  如果有記錄返回,則表明這些對象的下一個擴展大于該對象所屬表空間的最大擴展值,
  
  需調整相應表空間的存儲參數