天天看點

AG閱讀總結5.2——執行個體啟動與關閉

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

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

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

一、資料庫執行個體的啟動

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

    啟動過程:nomount ---> mount ---> open               (startup不帶參數将逐漸一一完成)

    1.nomount階段(即執行個體的啟動)

        執行個體的啟動通常包含下列任務:

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

               spfile<SID>.ora ---> spfile.ora ---> init<SID>.ora

           b.配置設定SGA

           c.啟動背景程序

           d.打開并修改告警<SID>.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              --->不準許新的連接配接,等待目前的session 結束,等待目前的事務結束,強制檢查點并關閉檔案

       transactional    --->不準許新的連接配接,不等待目前的session結束,等待目前的事務結束,強制檢查點并關閉檔案。

       immediate        --->不準許新的連接配接,不等待目前的session結束,不等待目前的事務結束,強制檢查點并關閉檔案。

       abort                  --->不準許新的連接配接,不等待目前的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$開頭

       DICT和DICT_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

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    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

    --啟動到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的背景程序。從開始。

    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

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

    --可以看到已經配置設定了SGA

    key                  shmid      owner      perms      bytes        nattch     status     

    0x99eb282c 65537      oracle      640        402653184  14                     

    0x6df43ca0 98304      oracle    640        127      

    0x6df43ca1 131073     oracle    640        127      

    0x6df43ca2 163842     oracle    640        127      

    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

    --切換到mount階段

    SQL> alter database mount;

    Database altered.

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

    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,NAME from 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     

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

       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

                     *

    ORA-01219: database not open: queries

allowed on fixed tables/views only    

    --切換到open 階段

    SQL> alter database open;

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

    root      4068  4036  0 13:29 pts/1    00:00:00

    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

    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

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

          SID      CTIME

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

          275       9607

          275       9270

          275       9243