Oracle 數據庫實例啓動關閉過程

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

-->Oracle 數據庫實例啓動關閉過程

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

/*

    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$開頭

      

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

    --可以查看日誌文件的相關信息

    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

/*

六、更多*/

 

   

    SQL/PLSQL 基礎

   

    Oralce 10g 使用DBCA創建數據庫

   

    使用Uniread實現SQLplus翻頁功能

   

    Linux (RHEL 5.4)下安裝Oracle 10g R2

   

    VmWare6.5.2下安裝RHEL 5.4(配置Oracle安裝環境)

   

    Oracle實例和Oracle數據庫(Oracle體系結構)

   

    Oracle相關

發佈了43 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章