麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Oracle > 正文

oracle 數據庫啟動階段分析

2024-08-29 14:00:33
字體:
來源:轉載
供稿:網友

Oracle Server主要由兩部分組成:Instance 和Database 。Instance 是指一組后臺進程/線程和一塊共享內存區域,而 Database是指存儲在磁盤上的一組物理文件。本文由數據庫 如何啟動入手。

數據庫的啟動

首先來分析一下數據庫的啟動過程,Oracle 數據庫的啟動主要包含 3 個步驟:

(1)啟動數據庫到 nomount 狀態;

(2)啟動數據庫到 mount 狀態;

(3)啟動數據庫到 open 狀態。

下面逐個來看看各個步驟的具體過程以其含義。

1. 啟動數據庫到nomount 狀態

在啟動的第一步驟,Oracle 首先尋找參數文件(pfile/spfile ),然后根據參數文件中 的設置,創建實例,分配內存,啟動后臺進程。

在這里可以看到,只要擁有了一個參數文件,就可以憑之啟動實例(Instance), 這一步 驟并不需要任何控制文件或數據文件的參與。

在創建數據庫時,如果在這一步驟就出現問題,那么通常可能是系統配置(內核參數等)存在問題,用戶需要檢查是否分配了足夠的系統資源等。 來看一下啟動到 nomount 狀態的過程:

[oracle/9016.html">oracle@dbtest dbs]$ cd $ORACLE_HOME/dbs[oracle@dbtest dbs]$ lshc_orcl.dat init.ora initorcl.ora lkORCL orapworcl spfileorcl.ora[oracle@dbtest dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Wed May 4 10:36:45 2016Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to an idle instance.SQL> startup nomount;ORACLE instance started.Total System Global Area 1152450560 bytesFixed Size         2212696 bytesVariable Size       922750120 bytesDatabase Buffers     218103808 bytesRedo Buffers        9383936 bytesSQL>

注意這里,Oracle 根據參數文件的內容,創建了 instance ,分配了相應的內存區域,啟 動了相應的后臺進程。 此時觀察警報日志文件(alert_<sid>.log ; show parameter dump查看路徑),可以看到這一階段的啟動過程,讀取參數 文件,應用參數啟動實例,所有在參數文件中定義的非缺省參數都會記錄在警報日志文件中:

Starting up:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options.Using parameter settings in server-side spfile /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.oraSystem parameters with non-default values: processes        = 150 sga_target        = 176M memory_target      = 1104M memory_max_target    = 1104M control_files      = "/u01/app/oracle/oradata/orcl/control01.ctl" control_files      = "/u01/app/oracle/flash_recovery_area/orcl/control02.ctl" db_block_size      = 8192 compatible        = "11.2.0.0.0" db_recovery_file_dest  = "/u01/app/oracle/flash_recovery_area" db_recovery_file_dest_size= 3882M undo_tablespace     = "UNDOTBS1" remote_login_passwordfile= "EXCLUSIVE" db_domain        = "oracle.com" global_names       = FALSE dispatchers       = "(PROTOCOL=TCP) (SERVICE=orclXDB)" shared_servers      = 5 audit_file_dest     = "/u01/app/oracle/admin/orcl/adump" audit_trail       = "DB" db_name         = "orcl" open_cursors       = 300 diagnostic_dest     = "/u01/app/oracle"

然后后臺進程依次啟動:

Wed May 04 10:36:55 2016PMON started with pid=2, OS id=3128 Wed May 04 10:36:55 2016VKTM started with pid=3, OS id=3132 at elevated priorityVKTM running at (10)millisec precision with DBRM quantum (100)msWed May 04 10:36:55 2016GEN0 started with pid=4, OS id=3138 Wed May 04 10:36:55 2016DIAG started with pid=5, OS id=3142 Wed May 04 10:36:55 2016DBRM started with pid=6, OS id=3146 Wed May 04 10:36:55 2016PSP0 started with pid=7, OS id=3150 Wed May 04 10:36:55 2016DIA0 started with pid=8, OS id=3158 Wed May 04 10:36:55 2016MMAN started with pid=9, OS id=3162 Wed May 04 10:36:55 2016DBW0 started with pid=10, OS id=3166 Wed May 04 10:36:55 2016LGWR started with pid=11, OS id=3170 Wed May 04 10:36:55 2016CKPT started with pid=12, OS id=3175 Wed May 04 10:36:55 2016SMON started with pid=13, OS id=3179 Wed May 04 10:36:55 2016RECO started with pid=14, OS id=3184 Wed May 04 10:36:55 2016MMON started with pid=15, OS id=3189 starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...Wed May 04 10:36:55 2016MMNL started with pid=16, OS id=3193 starting up 5 shared server(s) ...ORACLE_BASE from environment = /u01/app/oracle

這里注意一下 Oracle選擇參數文件的順序:

Oracle 首選spfile<sid>.ora文件作為啟動參數文件;如果該文件不 存在,Oracle選擇spfile.ora 文件;如果前兩者都不存在,Oracle將會選擇 init<sid>.ora文件;如果以上 3 個文件都不存在,Oracle 將無法創建和啟動 instance ,Oracle將無法啟動。

用戶可以在SQL*PLUS 中通過show parameter spfile 命令來檢查數據庫是否使用了 spfile文件,如果 value 不為Null,則數據庫使用了 spfile文件:

SQL> show parameter spfileNAME                 TYPE    VALUE------------------------------------ ----------- ------------------------------spfile                string   /u01/app/oracle/product/11.2.0                         /db_1/dbs/spfileorcl.oraSQL>

這時候也可以從操作系統查看啟動了的后臺進:

[root@dbtest trace]# ps -ef|grep ora_ oracle  3128   1 0 10:36 ?    00:00:00 ora_pmon_orcloracle  3132   1 0 10:36 ?    00:00:00 ora_vktm_orcloracle  3138   1 0 10:36 ?    00:00:00 ora_gen0_orcloracle  3142   1 0 10:36 ?    00:00:00 ora_diag_orcloracle  3146   1 0 10:36 ?    00:00:00 ora_dbrm_orcloracle  3150   1 0 10:36 ?    00:00:00 ora_psp0_orcloracle  3158   1 0 10:36 ?    00:00:00 ora_dia0_orcloracle  3162   1 0 10:36 ?    00:00:00 ora_mman_orcloracle  3166   1 0 10:36 ?    00:00:00 ora_dbw0_orcloracle  3170   1 0 10:36 ?    00:00:00 ora_lgwr_orcloracle  3175   1 0 10:36 ?    00:00:00 ora_ckpt_orcloracle  3179   1 0 10:36 ?    00:00:00 ora_smon_orcloracle  3184   1 0 10:36 ?    00:00:00 ora_reco_orcloracle  3189   1 0 10:36 ?    00:00:00 ora_mmon_orcloracle  3193   1 0 10:36 ?    00:00:00 ora_mmnl_orcloracle  3197   1 0 10:36 ?    00:00:00 ora_d000_orcloracle  3201   1 0 10:36 ?    00:00:00 ora_s000_orcloracle  3205   1 0 10:36 ?    00:00:00 ora_s001_orcloracle  3209   1 0 10:36 ?    00:00:00 ora_s002_orcloracle  3213   1 0 10:36 ?    00:00:00 ora_s003_orcloracle  3217   1 0 10:36 ?    00:00:00 ora_s004_orclroot   3358 3253 0 10:50 pts/3  00:00:00 grep ora_

如果這3 個文件都不存在,Oracle 將無法啟動:

[oracle@dbtest dbs]$ mv init.ora init.ora.bak[oracle@dbtest dbs]$ mv initorcl.ora initorcl.ora.bak[oracle@dbtest dbs]$ mv spfileorcl.ora spfileorcl.ora.bak[oracle@dbtest dbs]$ lshc_orcl.dat init.ora.bak initorcl.ora.bak lkORCL orapworcl spfileorcl.ora.bak[oracle@dbtest dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Wed May 4 10:55:42 2016Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to an idle instance.SQL> startup nomount;ORA-01078: failure in processing system parametersLRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

在Oracle整個啟動過程中,參數文件是寫在應用程序中的硬代碼,按照如上順序進行查 找,不能改變Oracle的搜索路徑及行為,但是如果參數文件不在相應的位置,在Linux/UNIX 系統上,可以通過符號鏈接來進行重定位。

在參數文件中,通常需要最少的參數是 db_name,設置了這個參數之后,數據庫實例就可以啟動,來看一個簡單的測試:

SQL> ! echo "db_name=julia" > initorcl.oraSQL> startup nomount;ORACLE instance started.Total System Global Area 217157632 bytesFixed Size         2211928 bytesVariable Size       159387560 bytesDatabase Buffers      50331648 bytesRedo Buffers        5226496 bytes

這樣,就通過了最少的參數需求啟動了 Oracle實例。

2. 啟動數據庫到mount 狀態

啟動到nomount 狀態以后,Oracle就可以從參數文件中獲得控制文件的位置信息, 這一部分信息在參數文件中的記錄類似如下所示(Oracle缺省會創建3 個控制文件,這 3 個控制文件的內容完全一致,是Oracle為了安全而采用的鏡像手段,在生產環境中,通 常應該將3 個控制文件存放在不同的物理硬盤上,避免因為介質故障而同時損壞3 個控制 文件):

SQL> show parameter control_filesNAME                 TYPE    VALUE------------------------------------ ----------- ------------------------------control_files            string   /u01/app/oracle/product/11.2.0                         /db_1/dbs/cntrlorcl.dbf

在nomount 狀態,可以查詢v$parameter視圖,獲得控制文件信息,這部分信息來自啟 動的參數文件;當數據庫 mount 之后,可以查詢 v$controlfile視圖獲得關于控制文件的信 息,此時,這部分信息來自控制文件:

[oracle@dbtest dbs]$ mv init.ora.bak init.ora[oracle@dbtest dbs]$ mv initorcl.ora.bak initorcl.ora[oracle@dbtest dbs]$ mv spfileorcl.ora.bak spfileorcl.ora[oracle@dbtest dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Wed May 4 11:07:07 2016Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to an idle instance.SQL> startup nomount;ORACLE instance started.Total System Global Area 1152450560 bytesFixed Size         2212696 bytesVariable Size       922750120 bytesDatabase Buffers     218103808 bytesRedo Buffers        9383936 bytesSQL> alter database mount;  Database altered.SQL> select * from v$controlfile; STATUS-------NAME--------------------------------------------------------------------------------IS_ BLOCK_SIZE FILE_SIZE_BLKS--- ---------- --------------/u01/app/oracle/oradata/orcl/control01.ctlNO    16384      594/u01/app/oracle/flash_recovery_area/orcl/control02.ctlNO    16384      594STATUS-------NAME--------------------------------------------------------------------------------IS_ BLOCK_SIZE FILE_SIZE_BLKS--- ---------- --------------

在mount 數據庫的過程中,Oracle需要找到控制文件并鎖定控制文件。如果控制文件全 部丟失此時就會報出如下錯誤:

SQL> alter database mount; alter database mount*ERROR at line 1:ORA-00205: error in identifying control file, check alert log for more info

這時候alert.log 文件中通常會記錄更為詳細的信息。

因為Oracle的3 個(缺省的)控制文件內容完全相同,如果只是損失了其中 1~2 個, 可以復制完好的控制文件,更改為相應的名稱,就可以啟動數據庫;如果丟失了所有的控制 文件,那么就需要恢復或重建控制文件來打開數據庫。

在正常Mount 數據庫的過程中,數據庫的警報日志文件僅記錄如下信息:

alter database mountWed May 04 11:07:44 2016Successful mount of redo thread 1, with mount id 1438756220Database mounted in Exclusive ModeLost write protection disabledCompleted: alter database mount

在這一步驟中,數據庫需要計算Mount id 并將其記錄在控制文件中,然后開始啟動 Heartbeat(心跳),每3 秒更新一次控制文件。

啟動到Mount 狀態,數據庫必須具備的另外一個重要文件是口令文件,該文件位于 $ORACLE_HOME/dbs 目錄下,缺省的名稱為 orapw 。 口令文件中存放 sysdba/sysoper 用戶的用戶名及口令:

[oracle@dbtest dbs]$ strings orapworcl ]/[ZORACLE Remote Password fileINTERNAL769C0CD849F9B8B25638228DAF52805F[oracle@dbtest dbs]$

在數據庫沒有啟動之前,數據庫內建用戶是無法通過數據庫本身來驗證身份的,通過口 令文件,Oracle 可以實現對用戶的身份認證,在數據庫未啟動之前登錄,進而啟動數據庫。 對于口令文件,Oracle 缺省查找 orapw 文件,如果該文件不存在,則繼續查找orapw 文件,如果兩者都不存在,則數據庫將會出現錯誤。

如果口令文件丟失,通過 orapw 工具即可重建,所以在通常的備份策略中可以不必包含 口令文件:

[oracle@dbtest dbs]$ orapwdUsage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n> where	file - name of password file (required),	password - password for SYS will be prompted if not specified at command line,	entries - maximum number of distinct DBA (optional),	force - whether to overwrite existing file (optional),	ignorecase - passwords are case-insensitive (optional),	nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).	 There must be no spaces around the equal-to (=) character.[oracle@dbtest dbs]$

通常在Linux/UNIX 平臺下,在$ORACLE_HOME/dbs 目錄下,還會存在另外一個文件,該文件命名規則為 lk<SID>,lk指lock ,該文件在數據庫啟動時創建,用于操作系統對數據庫的鎖定。當數據庫啟動時獲得鎖定,數據庫關閉時釋放。該文件內容通常只有一行,提示不要刪除,該文件僅僅用于鎖定.

3. 啟動數據庫open階段

由于控制文件中記錄了數據庫中數據文件、日志文件的位置信息、檢查點信息等重要信 息,所以在數據庫的 open階段,Oracle可以根據控制文件中記錄的這些信息找到這些文件, 然后進行檢查點及完整性檢查。

如果不存在問題就可以啟動數據庫,如果存在不一致或文件丟失則需要進行恢復。

進一步地說,實際上在數據庫 open的過程中,Oracle 進行的檢查中包括以下兩項:

第一次檢查數據文件頭中的檢查點計數(Checkpoint cnt )是否和控制文件中的檢查點 計數(Checkpoint cnt )一致。此步驟檢查用以確認數據文件是來自同一版本,而不是從備 份中恢復而來(因為 Checkpoint Cnt 不會被凍結,會一直被修改)。 下面通過一個簡單的測試來說明一下 Checkpoint Cnt的作用。

如果檢查點計數檢查通過,則數據庫進行第二次檢查。第二次檢查數據文件頭的開始SCN 和控制文件中記錄的該文件的結束 SCN 是否一致,如果控制文件中記錄的結束 SCN 等于數據 文件頭的開始 SCN,則不需要對那個文件進行恢復。

總結

以上就是本文關于oracle 數據庫啟動階段分析的全部內容,希望對大家有所幫助。感謝大家對本站的支持。有什么問題可以隨時留言,小編會竭盡所能給您想要的答案。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久国产精品久久久久 | 国产精品成人av片免费看最爱 | 久久久久99一区二区三区 | 免费一级肉体全黄毛片 | 午夜神马福利视频 | 成人免费网站在线观看视频 | 国产精品久久久久久久久岛 | 国内精品久久久久久久星辰影视 | 午夜精品成人 | 日韩视频在线一区二区三区 | 深夜激情视频 | 综合99 | 经典三级在线视频 | 毛片免费一区二区三区 | 国产成人在线网站 | 久久人人做 | 91九色网址 | av电影在线观看网站 | 色婷婷av一区二区三区久久 | 成人免费网站在线观看视频 | 免费a级黄色片 | 一区二区三区播放 | 91美女视频在线观看 | 国产激情精品一区二区三区 | 91av久久| 视频一区免费观看 | 欧美精品一区自拍a毛片在线视频 | 黄色一级片免费在线观看 | 全黄裸片武则天艳史 | 在线播放视频一区二区 | 亚洲成人精品一区二区 | 污版视频在线观看 | 午夜网站视频 | 久久2019中文字幕 | 暴力强行进如hdxxx | 国产成人av免费看 | 麻豆91精品91久久久 | 性aaa | 成人免费网站在线观看视频 | 在线看一区二区三区 | 日韩美香港a一级毛片 |