亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > 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), 這一步 驟并不需要任何控制文件或數據文件的參與。

在創建數據庫時,如果在這一步驟就出現問題,那么通??赡苁窍到y配置(內核參數等)存在問題,用戶需要檢查是否分配了足夠的系統資源等。 來看一下啟動到 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网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲国产视频| 欧美成人免费在线观看| 久久久久久久国产精品视频| 亚洲91精品在线观看| 国产精品美女主播在线观看纯欲| 久久国产天堂福利天堂| 日韩久久免费电影| 欧美成人精品一区二区| 欧美成人精品在线视频| 日韩在线观看免费全| 91av在线播放视频| 中文一区二区视频| 欧美综合在线观看| 亚洲激情视频网| 69影院欧美专区视频| 亚洲精品少妇网址| 久久夜色精品国产欧美乱| 综合136福利视频在线| 国产精品国产三级国产aⅴ9色| 亚洲一区二区三区在线视频| 久久韩国免费视频| 欧洲美女免费图片一区| 91av网站在线播放| 日韩美女在线看| xvideos国产精品| 亚洲а∨天堂久久精品9966| 一个人www欧美| 日韩精品免费视频| 久久久亚洲精品视频| 91精品视频在线看| 国产精品丝袜久久久久久不卡| 精品美女久久久久久免费| 亚洲国产欧美一区二区三区同亚洲| 久久久久久免费精品| 亚洲天堂日韩电影| 中文字幕日韩欧美精品在线观看| 亚洲成人久久一区| 日韩在线精品视频| 国产精品男人爽免费视频1| 欧美区二区三区| 成人久久18免费网站图片| 亚洲国产成人久久| 91网在线免费观看| 91久久久久久久久久久| 日韩视频欧美视频| 亚洲精品日韩av| 中文字幕精品—区二区| 中文字幕成人在线| 亚洲精品在线视频| 亚洲欧洲av一区二区| 国产xxx69麻豆国语对白| 国产精品黄页免费高清在线观看| 成人免费观看网址| 国产精品久久久久久久天堂| 亚洲国产日韩精品在线| 日韩成人av在线播放| 久久国产加勒比精品无码| 日韩电影在线观看免费| 亚洲午夜女主播在线直播| 亚洲欧美日本另类| 国产精品视频白浆免费视频| 亚洲成人在线视频播放| 亚洲午夜av电影| 亚洲国产毛片完整版| 亚洲天堂成人在线视频| 亚洲国产精品嫩草影院久久| 精品亚洲精品福利线在观看| 久久久久这里只有精品| 国产综合福利在线| 欧美激情亚洲国产| 按摩亚洲人久久| 亚洲欧美日韩在线一区| 色综合色综合网色综合| 国产精品入口日韩视频大尺度| 久久大大胆人体| 国产一区二区三区久久精品| 久久久精品国产一区二区| 中文字幕欧美视频在线| 日韩欧美综合在线视频| 日韩在线视频播放| 亚洲国产精彩中文乱码av| 热久久99这里有精品| 色噜噜国产精品视频一区二区| 国产精品亚洲欧美导航| 久久久免费高清电视剧观看| 97视频免费在线观看| 亚洲黄色成人网| 欧美激情第一页xxx| 福利视频一区二区| 九九久久国产精品| 久久久久中文字幕2018| 裸体女人亚洲精品一区| 欧美重口另类videos人妖| 粗暴蹂躏中文一区二区三区| 日韩电影中文 亚洲精品乱码| 亚洲已满18点击进入在线看片| 亚洲福利视频在线| 欧美性猛交xxxx免费看漫画| 97久久精品国产| 国产精品久久77777| 国产精品一区二区三| 高清欧美性猛交xxxx黑人猛交| 91丝袜美腿美女视频网站| 国产日韩欧美在线视频观看| 国产ts人妖一区二区三区| 一区二区三区视频在线| 国产不卡av在线| 亚洲国内精品在线| 欧美制服第一页| 91成人在线视频| 亚洲精品久久久久中文字幕二区| 欧美激情精品久久久久久蜜臀| 亚洲性视频网站| 最近2019年好看中文字幕视频| 欧美成人精品三级在线观看| 黑人狂躁日本妞一区二区三区| 亚洲国产成人爱av在线播放| 亚洲91av视频| 91久久久久久久久| 欧美成人精品影院| 97精品国产97久久久久久| 日韩av电影在线网| 98精品国产自产在线观看| 国产精品免费看久久久香蕉| 91精品国产高清久久久久久久久| 日韩大片在线观看视频| 菠萝蜜影院一区二区免费| 欧美国产在线视频| 日韩欧美中文字幕在线观看| 亚洲欧洲国产一区| 亚洲国产天堂久久综合网| 亚洲国产成人av在线| 国产美女久久久| 欧美激情精品久久久久| 精品高清美女精品国产区| 精品国模在线视频| 国产精品91久久久久久| 日韩成人av网址| 欧美成人免费va影院高清| 国产日韩欧美夫妻视频在线观看| 57pao国产成人免费| 最近2019年好看中文字幕视频| 欧美超级免费视 在线| 国产成人91久久精品| 国产精品成人免费视频| 色婷婷**av毛片一区| 欧美精品一本久久男人的天堂| 亚洲欧美另类中文字幕| 免费91麻豆精品国产自产在线观看| 国产乱肥老妇国产一区二| 亚洲成人av片| 主播福利视频一区| 日韩欧美成人区| 国产一级揄自揄精品视频| 日韩精品极品毛片系列视频| 91亚洲午夜在线| 78m国产成人精品视频| 欧美成人免费va影院高清| x99av成人免费| 欧美性jizz18性欧美| 欧美性生活大片免费观看网址| 久久人人97超碰精品888| 国产精品老女人精品视频| 国产精品亚洲视频在线观看|