Oracle 資料庫例項啟動關閉過程

us_yunleiwang發表於2013-12-05

--================================

--&gtOracle 資料庫例項啟動關閉過程

--================================

/*

    Oracle資料庫例項的啟動,嚴格來說應該是例項的啟動,資料庫僅僅是在例項啟動後進行裝載。Oracle資料啟動的過程被劃分為

幾個不同的步驟,在不同的啟動過程中,我們可以對其實現不同的操作,系統修復等等工作,因此瞭解Oracle資料啟動、關閉是非常

有必要的。下面詳細了Oracle Database 10g 資料庫啟動及關閉的過程。

 

一、資料庫例項的啟動

    啟動命令:starup [force][restrict] [pfile=...] [nomount] [mount] [open]

    啟動過程:nomount ---&gt mount ---&gt open               (startup不帶引數將逐步一一完成)

    1.nomount階段(即例項的啟動)

        例項的啟動通常包含下列任務:

           a.按以下順序在$ORACLE_HOME/dbs[win平臺為database]目錄下搜尋下列檔案,即如果第一個沒找到,就找下一個

               spfile.ora ---&gt spfile.ora ---&gt init.ora

           b.分配SGA

           c.啟動後臺程式

           d.開啟並修改告警.log檔案及跟蹤檔案

       使用場景:

           多用於資料庫建立、控制檔案重建、特定的備份恢復等

       注意:

           此階段不開啟任何的控制檔案及資料檔案。

          

    2.mount階段

        mount階段完成的任務:

           a.啟動例項並開啟控制檔案,將資料庫與例項關聯起來

           b.利用引數檔案中的說明,開啟並鎖定控制檔案

           c.讀取控制檔案以獲取資料檔案和重做日誌檔案的名字和狀態資訊,但不檢查資料日誌檔案是否存在

       使用場景:

           a.重新命名資料檔案,移動資料檔案位置等(資料庫開啟,表空間離線的情況下也可以重新命名資料檔案)

           b.啟用或關閉重做日誌檔案的歸檔及非歸檔模式

           c.實現資料庫的完全恢復

       注意:

           這一步會讀控制檔案,如果這一步有一個控制檔案損壞就無法啟動

          

    3.open階段

       mount階段完成的任務:

           a.開啟資料檔案

           b.開啟聯機日誌檔案

       注意:

            a.在此期間,Oracle伺服器將校驗所偶的資料檔案和聯機日誌檔案能否開啟並對資料庫作一致性檢查

           b.如果出現一致性錯誤,SMON程式將啟動例項恢復

           c.如果任一資料檔案或聯機日誌檔案丟失,Oracle伺服器將報錯

    4.特殊的方式開啟資料庫

       只讀模式:

       startup open read only;

      

       如果現在在mount

       alter database open read only;

      

       受限模式:

       有時進行資料庫維護護,希望一般的使用者不能登入。可以啟動到該模式,這樣只有使用者具有

       restricted session 許可權,才可登入到資料庫。

      

       啟動方法:

           startup restrict;

          

       取消受限:

            alter system disable restricted session;

 

二、資料庫例項的關閉

    關閉命令:shutdowm abort | immediate | transactional | normal (shutdown不帶引數將預設為normal)

    關閉選項:

       normal         ---&gt不准許新的連線,等待當前的session 結束,等待當前的事務結束,強制檢查點並關閉檔案

       transactional ---&gt不准許新的連線,不等待當前的session結束,等待當前的事務結束,強制檢查點並關閉檔案。

       immediate      ---&gt不准許新的連線,不等待當前的session結束,不等待當前的事務結束,強制檢查點並關閉檔案。

       abort          ---&gt不准許新的連線,不等待當前的session結束,不等待當前的事務結束,不作強制檢查點。

   

三、幾類診斷檔案

    包含有重要意義時間的具體資訊,用於解決問題,用於日常更好的管理資料庫

   

    a.alterSID.log    告警檔案

        記錄了資料庫啟動、關閉時間和一些重要操作及錯誤警告資訊,包含錯誤號ora-,dba管理

       位置由background_dump_dest

       維護alertSID.log,定期轉移,系統會自動產生新的alert_sid.log

      

    b.後臺程式跟蹤檔案:

       記錄了後臺程式的一些重要資訊和警告、錯誤等

       位置:$ORACLE_BASE/admin/vvorcl/bdump/vvorcl_lgwr_15135.trc

      

    c.使用者跟蹤檔案:

       由使用者程式產生也能由伺服器程式產生,跟蹤使用者的SQL語句的統計資訊,也包括錯誤資訊

       檔案位置由user_dump_dest

       使用者跟蹤:

              會話級:

                  alter session set sql_trace=true;

 

              例項級:

                  alter system set set sql_trace=true;

 

       跟蹤檔案的大小由max_dump_file_size引數決定。跟蹤時最好要限制他的大小

      

四、動態效能檢視

        記錄當前資料庫的活動,並且不停的更新,故不能保證讀取資料的一致性

        監控和調整資料庫

        所有者sys

        v$開頭

      

       DICTDICT_COLUMNS檢視包含了動態效能檢視描述及其列的描述

       v$FIXED_TALBE包含了所有檢視的名字及相關資訊

      

      

五、演示 */

    [root@robinson ~]# su - oracle

    --檢視未啟動例項前的程式情況

    [oracle@robinson ~]$ ps -aef |grep oracle

    root      3332  3300  0 12:20 pts/1    00:00:00 su - oracle

    oracle    3333  3332  0 12:20 pts/1    00:00:00 -bash

    oracle    3365  3333  0 12:20 pts/1    00:00:00 ps -aef

    oracle    3366  3333  0 12:20 pts/1    00:00:00 grep oracle

 

    --使用ipcs檢視當前程式間通訊所用到的共享資源,記憶體段及訊號量,

    --可以看出當前無任何通訊裝置及共享資源

    [oracle@robinson ~]$ ipcs -a

 

    ------ Shared Memory Segments --------

    key        shmid      owner      perms      bytes      nattch     status     

 

    ------ Semaphore Arrays --------

    key        semid      owner      perms      nsems    

 

    ------ Message Queues --------

    key        msqid      owner      perms      used-bytes   messages   

 

    --登陸到sqlplus

    [oracle@robinson ~]$ sqlplus / as sysdba

 

    SQL*Plus: Release 10.2.0.1.0 - Production on Thu Apr 29 13:07:29 2010

 

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

    Connected to an idle instance.

 

    --再次檢視程式情況,多出了程式

    SQL> !ps -aef | grep oracle

    root      3332  3300  0 12:20 pts/1    00:00:00 su - oracle

    oracle    3333  3332  0 12:20 pts/1    00:00:00 -bash

    oracle    3972  3333  0 13:07 pts/1    00:00:00 sqlplus   as sysdba

    oracle    3973  3972  0 13:07 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

    oracle    3974  3972  0 13:07 pts/1    00:00:00 /bin/bash -c ps -aef | grep oracle

    oracle    3975  3974  0 13:07 pts/1    00:00:00 ps -aef

 

    --再次檢視程式間通訊資源,同樣是沒有任何分配

    SQL> !ipcs -a

 

    ------ Shared Memory Segments --------

    key        shmid      owner      perms      bytes      nattch     status     

 

    ------ Semaphore Arrays --------

    key        semid      owner      perms      nsems    

 

    ------ Message Queues --------

    key        msqid      owner      perms      used-bytes   messages   

 

    --啟動到nomount

    SQL> startup nomount

    ORACLE instance started.

 

    Total System Global Area  398458880 bytes

    Fixed Size                  1219640 bytes

    Variable Size             117441480 bytes

    Database Buffers          276824064 bytes

    Redo Buffers                2973696 bytes

 

    --可以看到多出了一些後臺程式,即為Oracle的後臺程式。從開始。

    SQL> !ps -aef | grep oracle

    root      3332  3300  0 12:20 pts/1    00:00:00 su - oracle

    oracle    3333  3332  0 12:20 pts/1    00:00:00 -bash

    oracle    3972  3333  0 13:07 pts/1    00:00:00 sqlplus   as sysdba

    oracle    3981     1  0 13:09 ?        00:00:00 ora_pmon_orcl

    oracle    3983     1  0 13:09 ?        00:00:00 ora_psp0_orcl

    oracle    3985     1  0 13:09 ?        00:00:00 ora_mman_orcl

    oracle    3987     1  0 13:09 ?        00:00:00 ora_dbw0_orcl

    oracle    3989     1  0 13:09 ?        00:00:00 ora_lgwr_orcl

    oracle    3991     1  0 13:09 ?        00:00:00 ora_ckpt_orcl

    oracle    3993     1  0 13:09 ?        00:00:00 ora_smon_orcl

    oracle    3995     1  0 13:09 ?        00:00:00 ora_reco_orcl

    oracle    3997     1  0 13:09 ?        00:00:00 ora_cjq0_orcl

    oracle    3999     1  0 13:09 ?        00:00:00 ora_mmon_orcl

    oracle    4001     1  0 13:09 ?        00:00:00 ora_mmnl_orcl

    oracle    4003     1  0 13:09 ?        00:00:00 ora_d000_orcl

    oracle    4005     1  0 13:09 ?        00:00:00 ora_s000_orcl

    oracle    4006  3972  0 13:09 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

    oracle    4009  3972  0 13:10 pts/1    00:00:00 /bin/bash -c ps -aef | grep oracle

    oracle    4010  4009  0 13:10 pts/1    00:00:00 ps -aef       

 

    --可以看到已經分配了SGA

    SQL> !ipcs -a

 

    ------ Shared Memory Segments --------

    key        shmid      owner      perms      bytes      nattch     status     

    0x99eb282c 65537      oracle    640        402653184  14                     

 

    ------ Semaphore Arrays --------

    key        semid      owner      perms      nsems    

    0x6df43ca0 98304      oracle    640        127      

    0x6df43ca1 131073     oracle    640        127      

    0x6df43ca2 163842     oracle    640        127      

 

    ------ Message Queues --------

    key        msqid      owner      perms      used-bytes   messages

 

    --檢視控制檔案,沒有任何資料,因為此階段控制檔案並沒有開啟

    SQL> select * from v$controlfile;

 

    no rows selected

 

    --檢視資料檔案和日誌檔案,提示database not mounted

    SQL> select * from v$datafile;

    select * from v$datafile

                *

    ERROR at line 1:

    ORA-01507: database not mounted

 

    SQL> select * from v$logfile;

    select * from v$logfile

                *

    ERROR at line 1:

    ORA-01507: database not mounted

 

    --切換到mount階段

    SQL> alter database mount;

 

    Database altered.

 

    --可以檢視控制檔案的相關資訊

    SQL> select * from v$controlfile;

 

    STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS

    ------- -------------------------------------------------- --- ---------- --------------

           /u01/app/oracle/oradata/orcl/control01.ctl         NO       16384            430

           /u01/app/oracle/oradata/orcl/control02.ctl         NO       16384            430

           /u01/app/oracle/oradata/orcl/control03.ctl         NO       16384            430

          

    --可以檢視資料檔案的相關資訊

    SQL> select FILE#,STATUS,ENABLED,CHECKPOINT_CHANGE#,CHECKPOINT_TIME,ONLINE_TIME,NAMEfrom v$datafile;

 

        FILE# STATUS  ENABLED    CHECKPOINT_CHANGE# CHECKPOIN ONLINE_TI NAME

    ---------- ------- ---------- ------------------ --------- --------- --------------------------------------------------

            1 SYSTEM  READ WRITE            2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/system01.dbf

            2 ONLINE  READ WRITE            2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/undotbs01.dbf

            3 ONLINE  READ WRITE            2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/sysaux01.dbf

            4 ONLINE  READ WRITE            2027235 28-APR-10 06-APR-10/u01/app/oracle/oradata/orcl/users01.dbf

            5 ONLINE  READ WRITE            2027235 28-APR-10          /u01/app/oracle/oradata/orcl/example01.dbf

            6 ONLINE  READ WRITE            2027235 28-APR-10          /u01/app/oracle/oradata/orcl/Test.dbf

            7 ONLINE  READ WRITE            2027235 28-APR-10          /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s

                                                                _5vrl1t7h_.dbf     

    --可以檢視日誌檔案的相關資訊

    SQL> select * from v$logfile;

 

       GROUP# STATUS  TYPE    MEMBER                                                      IS_

    ---------- ------- ------- ------------------------------------------------------------ ---

            3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log                     NO

            2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log                     NO

            1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log                     NO          

 

    --資料不可訪問,因為在此階段,資料檔案,日誌檔案並沒有開啟

    SQL> select * from scott.emp;

    select * from scott.emp

                     *

    ERROR at line 1:

    ORA-01219: database not open: queries allowed on fixed tables/views only    

 

    --切換到open 階段

    SQL> alter database open;

 

    Database altered.

 

    --再次檢視程式資訊,多出了之後的相關程式

    SQL> !ps -aef | grep oracle

    oracle    3981     1  0 13:09 ?        00:00:00 ora_pmon_orcl

    oracle    3983     1  0 13:09 ?        00:00:00 ora_psp0_orcl

    oracle    3985     1  0 13:09 ?        00:00:00 ora_mman_orcl

    oracle    3987     1  0 13:09 ?        00:00:00 ora_dbw0_orcl

    oracle    3989     1  0 13:09 ?        00:00:00 ora_lgwr_orcl

    oracle    3991     1  0 13:09 ?        00:00:00 ora_ckpt_orcl

    oracle    3993     1  0 13:09 ?        00:00:00 ora_smon_orcl

    oracle    3995     1  0 13:09 ?        00:00:00 ora_reco_orcl

    oracle    3997     1  0 13:09 ?        00:00:00 ora_cjq0_orcl

    oracle    3999     1  0 13:09 ?        00:00:00 ora_mmon_orcl

    oracle    4001     1  0 13:09 ?        00:00:00 ora_mmnl_orcl

    oracle    4003     1  0 13:09 ?        00:00:00 ora_d000_orcl

    oracle    4005     1  0 13:09 ?        00:00:00 ora_s000_orcl

    root      4068  4036  0 13:29 pts/1    00:00:00 su - oracle

    oracle    4069  4068  0 13:29 pts/1    00:00:00 -bash

    oracle    4101  4069  0 13:29 pts/1    00:00:00 sqlplus

    oracle    4102  4101  0 13:29 ?        00:00:01 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

    oracle    4137     1  0 13:54 ?        00:00:00 ora_qmnc_orcl

    oracle    4139     1  0 13:54 ?        00:00:01 ora_j000_orcl

    oracle    4141     1  0 13:54 ?        00:00:00 ora_j001_orcl

    oracle    4143     1  0 13:54 ?        00:00:00 ora_j002_orcl

    oracle    4145     1  0 13:54 ?        00:00:00 ora_j003_orcl

    oracle    4147     1  0 13:54 ?        00:00:00 ora_j004_orcl

    oracle    4149     1  0 13:54 ?        00:00:00 ora_j005_orcl

    oracle    4159     1  0 13:54 ?        00:00:00 ora_q001_orcl

    oracle    4167     1  0 13:56 ?        00:00:00 ora_q002_orcl

    oracle    4169     1  0 13:57 ?        00:00:00 ora_q003_orcl

    oracle    4172  4101  0 13:58 pts/1    00:00:00 /bin/bash -c ps -aef | grep oracle

    oracle    4173  4172  0 13:58 pts/1    00:00:00 ps -aef

 

    --資料已可正常訪問

    SQL> select * from scott.emp where ename = 'SCOTT';

 

        EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

    ---------- ---------- --------- ---------- --------- ---------- ----------

       DEPTNO

    ----------

         7788 SCOTT      ANALYST         7566 19-APR-87       3000

        

    --檢視告警日誌檔案路徑

    SQL> show parameter background_dump_dest

 

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    background_dump_dest                 string      /u01/app/oracle/admin/orcl/bdu

                                               mp  

                                               

    --檢視動態效能檢視

    SQL> select sql_text,executions from v$sql where cpu_time >2000000;

 

    SQL_TEXT

    --------------------------------------------------------------------------------

    EXECUTIONS

    ----------

    select s.synonym_name object_name, o.object_type from all_synonyms s,      sys.a

    ll_objects o where s.owner in ('PUBLIC', :schema) and o.owner = s.table_owner an

    d o.object_name = s.table_name and o.object_type in ('TABLE', 'VIEW', 'PACKAGE',

    'TYPE', 'PROCEDURE', 'FUNCTION', 'SEQUENCE')

            2

 

    SQL> select username,status,server,state from v$session where program = 'plsqldev.exe';

 

    USERNAME                       STATUS   SERVER    STATE

    ------------------------------ -------- --------- -------------------

    SYS                            INACTIVE DEDICATED WAITING

    SYS                            INACTIVE DEDICATED WAITING

 

    SQL> select sid,ctime from v$lock where sid = 275;

 

          SID      CTIME

    ---------- ----------

          275       9607

          275       9270

          275       9243

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章