日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle 数据库实例介绍

發(fā)布時(shí)間:2023/12/10 数据库 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 数据库实例介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 數(shù)據(jù)庫實(shí)例介紹
      • 實(shí)例結(jié)構(gòu)
      • 實(shí)例配置
      • 讀寫實(shí)例與只讀實(shí)例
      • 實(shí)例生命周期
      • 實(shí)例標(biāo)識
        • Oracle 根目錄
        • Oracle 主目錄
        • Oracle SID
    • 實(shí)例啟動(dòng)與關(guān)閉
      • 啟動(dòng)實(shí)例與數(shù)據(jù)庫
        • 管理員登錄
        • 啟動(dòng)實(shí)例
        • 加載數(shù)據(jù)庫
        • 打開數(shù)據(jù)庫
          • 只讀模式
          • 數(shù)據(jù)庫文件檢查
      • 關(guān)閉數(shù)據(jù)庫與實(shí)例
        • 關(guān)閉模式
        • 關(guān)閉數(shù)據(jù)庫
          • 正常關(guān)閉
          • 異常關(guān)閉
        • 卸載數(shù)據(jù)庫
        • 關(guān)閉實(shí)例
    • 檢查點(diǎn)
      • 檢查點(diǎn)的作用
      • 檢查點(diǎn)觸發(fā)時(shí)機(jī)
    • 實(shí)例恢復(fù)
      • 實(shí)例恢復(fù)的作用
      • 實(shí)例恢復(fù)的時(shí)間
      • 檢查點(diǎn)的重要性
      • 實(shí)例恢復(fù)步驟
    • 參數(shù)文件
      • 初始化參數(shù)
        • 初始化參數(shù)分組
        • 基本參數(shù)與高級參數(shù)
      • 服務(wù)器參數(shù)文件
      • 文本初始化參數(shù)文件
      • 修改初始化參數(shù)
    • 診斷文件
      • 自動(dòng)診斷庫
        • 問題和事件
        • ADR 目錄結(jié)構(gòu)
      • 告警日志
      • DDL 日志
      • 跟蹤文件
        • 跟蹤文件的類型
        • 跟蹤文件的位置
        • 跟蹤文件的拆分
      • 診斷轉(zhuǎn)儲(chǔ)文件
        • 跟蹤轉(zhuǎn)儲(chǔ)與事件

文章翻譯源于 Oracle Database Database Concepts, 18c

本章介紹 Oracle 數(shù)據(jù)庫實(shí)例的原理,實(shí)例的參數(shù)文件和診斷文件,以及實(shí)例創(chuàng)建和數(shù)據(jù)庫的打開與關(guān)閉的過程。

本章包含以下內(nèi)容:

  • 數(shù)據(jù)庫實(shí)例介紹
  • 實(shí)例啟動(dòng)與關(guān)閉
  • 檢查點(diǎn)
  • 實(shí)例恢復(fù)
  • 參數(shù)文件
  • 診斷文件

數(shù)據(jù)庫實(shí)例介紹

數(shù)據(jù)庫實(shí)例(instance)是一組用于管理數(shù)據(jù)庫文件的內(nèi)存結(jié)構(gòu)。

數(shù)據(jù)庫是一組位于磁盤上的物理文件,通過 CREATE DATABASE 語句創(chuàng)建。實(shí)例管理相關(guān)的數(shù)據(jù),并且為數(shù)據(jù)庫用戶提供服務(wù)。

每個(gè)正在運(yùn)行的 Oracle 數(shù)據(jù)庫至少與一個(gè)實(shí)例相關(guān)聯(lián)。因?yàn)閷?shí)例存在于內(nèi)存中,而數(shù)據(jù)庫存在磁盤上,所以實(shí)例可以獨(dú)立于數(shù)據(jù)庫存在,數(shù)據(jù)庫也可以獨(dú)立于實(shí)例存在。

實(shí)例結(jié)構(gòu)

當(dāng)一個(gè)實(shí)例啟動(dòng)時(shí),Oracle 數(shù)據(jù)庫分配一個(gè)稱為系統(tǒng)全局區(qū)(SGA)的內(nèi)存區(qū)域,并啟動(dòng)一個(gè)或多個(gè)后臺進(jìn)程。

SGA 的作用包括:

  • 維護(hù)多個(gè)進(jìn)程和線程并發(fā)訪問的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
  • 緩存從磁盤讀取的數(shù)據(jù)塊
  • 在寫入在線重做日志文件之前緩沖重做數(shù)據(jù)
  • 存儲(chǔ) SQL 執(zhí)行計(jì)劃

同一個(gè)服務(wù)器上的 Oracle 進(jìn)程之間共享 SGA。Oracle 進(jìn)程與 SGA 的交互方式取決于操作系統(tǒng)。

一個(gè)數(shù)據(jù)庫實(shí)例包括多個(gè)后臺進(jìn)程(background process)。服務(wù)器進(jìn)程(server process),以及分配給它們的內(nèi)存,也位于實(shí)例之中。實(shí)例在服務(wù)器進(jìn)程結(jié)束后仍然繼續(xù)存在。

下圖顯示了 Oracle 數(shù)據(jù)庫實(shí)例中的主要組件。

圖 13- 1 數(shù)據(jù)庫實(shí)例

實(shí)例配置

Oracle 數(shù)據(jù)庫支持單實(shí)例配置和真正應(yīng)用集群(Oracle RAC)配置。這兩種配置只能二選其一。

在單實(shí)例配置中,數(shù)據(jù)庫和實(shí)例之間一一對應(yīng)。在 Oracle RAC 中,數(shù)據(jù)庫和實(shí)例存在一對多的關(guān)系。

下圖顯示了兩種可能的數(shù)據(jù)庫實(shí)例配置。

圖 13-2 數(shù)據(jù)庫實(shí)例配置

無論是單實(shí)例還是 Oracle RAC 配置,一個(gè)實(shí)例每次只能與一個(gè)數(shù)據(jù)庫關(guān)聯(lián)。管理員可以啟動(dòng)一個(gè)實(shí)例,然后加載(關(guān)聯(lián))一個(gè)數(shù)據(jù)庫,但是不能同時(shí)加載兩個(gè)數(shù)據(jù)庫。

注意:除非特別指出,本章討論單實(shí)例數(shù)據(jù)庫配置。

一臺服務(wù)器上可以同時(shí)運(yùn)行多個(gè)實(shí)例,每個(gè)實(shí)例管理各自的數(shù)據(jù)庫。例如,某臺服務(wù)器上擁有兩個(gè)不同的數(shù)據(jù)庫:prod1 和 prod2。一個(gè)實(shí)例管理 prod1另一個(gè)實(shí)例管理 prod2。

讀寫實(shí)例與只讀實(shí)例

實(shí)例支持兩種模式:讀寫實(shí)例與只讀實(shí)例。

對于讀寫實(shí)例,可以處理 DML 操作,支持客戶端的直接連接請求。這是默認(rèn)方式。與此相反,只讀實(shí)例能夠運(yùn)行查詢,但是不能支持 DML修改操作(UPDATE、DELETE、INSERT 以及 MERGE),也不能從客戶端直接進(jìn)行連接。

注意:除非另外指明,本文檔中的實(shí)例都是指讀寫實(shí)例。

在之前的版本中,所有的實(shí)例(除非管理一個(gè) standby 數(shù)據(jù)庫)都是讀寫實(shí)例。從 Oracle 數(shù)據(jù)庫 12c (12.2) 開始, 一個(gè)數(shù)據(jù)庫可以同時(shí)存在只讀實(shí)例和讀寫實(shí)例。這種配置對于即查詢數(shù)據(jù)又修改數(shù)據(jù)庫的并行 SQL 語句非常有用,因?yàn)樽x寫實(shí)例和只讀實(shí)例都能夠查詢數(shù)據(jù),而讀寫實(shí)例能夠修改數(shù)據(jù)。

與讀寫實(shí)例相比,只讀實(shí)例具有以下特點(diǎn):

  • 只能打開一個(gè)已經(jīng)被讀寫實(shí)例打開的數(shù)據(jù)庫
  • 禁用了許多不必要的后臺進(jìn)程,包檢查點(diǎn)進(jìn)程和歸檔進(jìn)程
  • 可以加載一個(gè)被禁用的重做線程或者沒有任何在線重做日期的線程

要想將實(shí)例設(shè)置為只讀模式,可以將初始化參數(shù) INSTANCE_MODE 設(shè)置為 READ_ONLY。該參數(shù)的默認(rèn)值為 READ_WRITE。

實(shí)例生命周期

數(shù)據(jù)庫實(shí)例從 STARTUP 命令創(chuàng)建開始,直到被終止時(shí)結(jié)束。

在此期間,一個(gè)實(shí)例能且只能與一個(gè)數(shù)據(jù)庫相關(guān)聯(lián)。進(jìn)一步而言,該實(shí)例只能加載數(shù)據(jù)庫一次、打開數(shù)據(jù)庫一次,并且關(guān)閉數(shù)據(jù)庫一次。在數(shù)據(jù)庫關(guān)閉之后,必須重新啟動(dòng)一個(gè)實(shí)例,然后加載并打開數(shù)據(jù)庫。

下表演示了一個(gè)實(shí)例嘗試重新打開之前關(guān)閉的數(shù)據(jù)庫的過程。

表 13- 1 實(shí)例生命周期

語句注釋
SQL> STARTUP
ORACLE instance started.
Total System Global Area 468729856 bytes
Fixed Size 1333556 bytes
Variable Size 440403660 bytes
Database Buffers 16777216 bytes
Redo Buffers 10215424 bytes
Database mounted.
Database opened.
STARTUP 命令創(chuàng)建一個(gè)實(shí)例,然后加載并打開數(shù)據(jù)庫。
SQL> SELECT
TO_CHAR(STARTUP_TIME,‘MON-DD-RR HH24:MI:SS’)
AS “Inst Start Time” FROM V$INSTANCE;

Inst Start Time
------------------
JUN-18-14 13:14:48
該查詢顯示了當(dāng)前實(shí)例的啟動(dòng)時(shí)間。
SQL> SHUTDOWN IMMEDIATE關(guān)閉數(shù)據(jù)庫和實(shí)例,結(jié)束實(shí)例的生命周期。
SQL> STARTUP
Oracle instance started… . .
STARTUP 命令創(chuàng)建一個(gè)新的實(shí)例,然后加載并打開數(shù)據(jù)庫。
SQL> SELECT
TO_CHAR(STARTUP_TIME,‘MON-DD-RR HH24:MI:SS’)
AS “Inst Start Time” FROM V$INSTANCE;

Inst Start Time
------------------
JUN-18-14 13:16:40
該查詢顯示了當(dāng)前實(shí)例的啟動(dòng)時(shí)間。不同的啟動(dòng)時(shí)間表明了這是一個(gè)新的實(shí)例。

實(shí)例標(biāo)識

一個(gè)主機(jī)上可以運(yùn)行多個(gè)數(shù)據(jù)庫實(shí)例。因此,訪問時(shí)需要指定訪問哪個(gè)實(shí)例。

Oracle 最優(yōu)靈活體系結(jié)構(gòu)(OFA)規(guī)則是一組配置指南,可以確保組織良好的 Oracle 軟件安裝。本節(jié)中的示例使用 OFA 體系結(jié)構(gòu)。

本節(jié)包含以下主題:

  • Oracle 根目錄
  • Oracle 主目錄
  • Oracle 系統(tǒng)標(biāo)識符(SID)

Oracle 根目錄

Oracle 根目錄(Oracle Base directory)存儲(chǔ) Oracle 產(chǎn)品的二進(jìn)制文件。

Oracle 根目錄是 Oracle 數(shù)據(jù)庫安裝擁有者的數(shù)據(jù)庫主目錄。一個(gè)主機(jī)上可以按照多個(gè) Oracle 數(shù)據(jù)庫,以及多個(gè) Oracle 數(shù)據(jù)庫軟件安裝的擁有者。

以下示例顯示了操作系統(tǒng)用戶 oracle 的 Oracle 根目錄:

/u01/app/oracle

在路徑的前綴中, /u01/ 是存儲(chǔ)的掛載點(diǎn), /u01/app/ 是安裝應(yīng)用軟件的分支目錄。

Oracle 主目錄

Oracle 主目錄(Oracle home directory)是 Oracle 數(shù)據(jù)庫軟件的安裝位置。

每個(gè)新的 Oracle 數(shù)據(jù)庫軟件安裝都需要指定一個(gè)新的 Oracle 主目錄。默認(rèn)情況下,Oracle 主目錄是 Oracle 根目錄(ORACLE_BASE)下的一個(gè)子目錄。

在同一個(gè)主機(jī)上,相同的 Oracle 根目錄下,可以安裝不同版本的數(shù)據(jù)庫軟件。歸屬于不同系統(tǒng)用戶的不同版本的多個(gè)數(shù)據(jù)庫可以并存。

以下示例顯示了三個(gè)不同的 Oracle 主目錄的完整路徑名稱,它們都位于相同的 Oracle 根目錄(/u01/app/oracle/)下:

/u01/app/oracle/product/12.1.0/dbhome_1 /u01/app/oracle/product/12.1.0/dbhome_2 /u01/app/oracle/product/18.0.0/dbhome_1

路徑名稱中, Oracle 根目錄(/u01/app/oracle/)之后的部分包含了產(chǎn)品版本編號(例如 12.1.0)和 Oracle 主目錄的相對路徑(例如 dbhome_1)目錄 /u01/app/oracle/product/12.1.0/ 中包含了兩個(gè)不同的 Oracle 主目錄: dbhome_1 和 dbhome_2。

從 Oracle Database 18c 開始,支持創(chuàng)建只讀的 Oracle 主目錄,將其作為一個(gè)軟件的映像。只讀 Oracle 主目錄存儲(chǔ)靜態(tài)文件,例如二進(jìn)制程序。Oracle 根主目錄(ORACLE_BASE_HOME)位于 ORACLE_BASE/homes/home_name,存儲(chǔ)與特定 Oracle 主目錄相關(guān)的動(dòng)態(tài)文件。Oracle 根配置目錄(ORACLE_BASE_CONFIG)由 Oracle 根目錄中的所有 Oracle 主目錄共享,用于存儲(chǔ)實(shí)例相關(guān)的動(dòng)態(tài)文件。

以下示例中,第一個(gè)路徑是一個(gè)只讀 Oracle 主目錄,第二個(gè)路徑是其對應(yīng)的 根主目錄:

/u01/app/oracle/product/18.0.0/ro_dbhome_1 /u01/app/oracle/homes/ro_dbhome_1

Oracle SID

系統(tǒng)標(biāo)識符(SID) 是一個(gè)主機(jī)上的 Oracle 數(shù)據(jù)庫實(shí)例的唯一名稱。

在 UNIX 和 Linux 系統(tǒng)上,Oracle 數(shù)據(jù)庫使用 SID 和 Oracle 主目錄的路徑名稱作為共享內(nèi)存的鍵值。 另外,Oracle 數(shù)據(jù)庫默認(rèn)使用 SID 查找初始化參數(shù)文件,通過初始化文件查找其他相關(guān)文件,例如數(shù)據(jù)庫控制文件。

在大多數(shù)平臺上,使用 ORACLE_SID 環(huán)境變量設(shè)置 SID,使用 ORACLE_HOME 變量設(shè)置 Oracle 主目錄。客戶端連接數(shù)據(jù)庫實(shí)例時(shí),可以在 Oracle Net 連接中指定 SID,或者使用一個(gè)網(wǎng)絡(luò)服務(wù)名(service name)。 Oracle 數(shù)據(jù)庫將服務(wù)名轉(zhuǎn)換為 ORACLE_HOME 和 ORACLE_SID。

傳統(tǒng)的可讀寫 Oracle 主目錄包含了實(shí)例相關(guān)的文件。但是,如果 Oracle 主目錄改為只讀,實(shí)例相關(guān)的文件單獨(dú)存儲(chǔ)在 Oracle 根目錄中。無論哪種情況,名稱中包含 SID 的文件存儲(chǔ)在 Oracle 主配置目錄(ORACLE_BASE_CONFIG)的 dbs 子目錄中。有了這種文件分離,用戶可以使用只讀 Oracle 主目錄中的軟件創(chuàng)建數(shù)據(jù)庫,然后使用另一個(gè)只讀 Oracle 主目錄中的軟件啟動(dòng)一個(gè)實(shí)例,管理該數(shù)據(jù)庫。

實(shí)例啟動(dòng)與關(guān)閉

數(shù)據(jù)庫實(shí)例(database instance)為用戶提供數(shù)據(jù)庫訪問。實(shí)例和數(shù)據(jù)庫存在各種不同的狀態(tài)。

啟動(dòng)實(shí)例與數(shù)據(jù)庫

通常來說,管理員手動(dòng)啟動(dòng)一個(gè)實(shí)例,然后加載并打開數(shù)據(jù)庫,接受客戶端連接。這些操作可以通過 SQL*Plus 的 STARTUP 命令、 Oracle 企業(yè)管理器(Enterprise Manager)或者 SRVCTL 工具完成。

如果使用 Oracle Net 啟動(dòng)一個(gè)數(shù)據(jù)庫實(shí)例,需要滿足以下條件:

  • 數(shù)據(jù)庫通過靜態(tài)方式注冊到 Oracle Net 監(jiān)聽器中。
  • 使用 SYSDBA 權(quán)限進(jìn)行連接。

監(jiān)聽器啟動(dòng)一個(gè)專用的服務(wù)器進(jìn)程,用于啟動(dòng)數(shù)據(jù)庫實(shí)例。

下圖顯示了數(shù)據(jù)庫從關(guān)閉到打開的處理過程。

圖 13-3 實(shí)例與數(shù)據(jù)庫啟動(dòng)順序

數(shù)據(jù)庫從關(guān)閉狀態(tài)到打開狀態(tài)需要經(jīng)歷以下幾個(gè)階段。

表 13-2 實(shí)例啟動(dòng)階段

階段加載狀態(tài)描述更多內(nèi)容
1啟動(dòng)實(shí)例,未加載數(shù)據(jù)庫啟動(dòng)一個(gè)實(shí)例,但沒有與數(shù)據(jù)庫關(guān)聯(lián)。啟動(dòng)實(shí)例
2加載數(shù)據(jù)庫實(shí)例已經(jīng)啟動(dòng),并且讀取數(shù)據(jù)庫的控制文件。數(shù)據(jù)庫對用戶不可用。加載數(shù)據(jù)庫
3打開數(shù)據(jù)庫實(shí)例已經(jīng)啟動(dòng),并且打開數(shù)據(jù)庫。授權(quán)用戶可以訪問數(shù)據(jù)文件中的數(shù)據(jù)。打開數(shù)據(jù)庫

管理員登錄

數(shù)據(jù)庫的啟動(dòng)和關(guān)閉是非常強(qiáng)大的管理功能,只能由具有管理員權(quán)限的用戶執(zhí)行。

普通用戶無法控制數(shù)據(jù)庫的當(dāng)前狀態(tài)。根據(jù)操作系統(tǒng)的不同,用戶可以通過以下方式獲得管理員權(quán)限:

  • 用戶的操作系統(tǒng)權(quán)限允許他/她已管理員權(quán)限連接到數(shù)據(jù)庫。
  • 用戶被授予特殊的系統(tǒng)權(quán)限,數(shù)據(jù)庫使用口令文件認(rèn)證通過網(wǎng)絡(luò)連接的管理員

以下特殊的系統(tǒng)權(quán)限能夠在數(shù)據(jù)庫未打開時(shí)訪問實(shí)例:

  • SYSDBA
  • SYSOPER
  • SYSBACKUP
  • SYSDG
  • SYSKM

以上權(quán)限的管理不在數(shù)據(jù)庫的自身范圍之內(nèi)。使用 SYSDBA 系統(tǒng)權(quán)限連接時(shí),用戶位于 SYS 模式中。使用 SYSOPER 連接時(shí),用戶位于公共模式中。SYSOPER 權(quán)限是 SYSDBA 權(quán)限的一個(gè)子集。

啟動(dòng)實(shí)例

當(dāng) Oracle 數(shù)據(jù)庫啟動(dòng)一個(gè)實(shí)例時(shí),需要經(jīng)過幾個(gè)階段。

實(shí)例啟動(dòng)階段包括:

  • 查找不同平臺下默認(rèn)位置中的服務(wù)器參數(shù)文件,如果沒有找到該文件,查找文本形式的初始化參數(shù)文件(在 STARTUP 命令中指定 SPFILE 或 PFILE 參數(shù)將會(huì)覆蓋默認(rèn)行為)
  • 讀取參數(shù)文件,獲取初始化參數(shù)的值
  • 基于初始化參數(shù)設(shè)置分配 SGA
  • 啟動(dòng) Oracle 后臺進(jìn)程
  • 打開告警日志(alert log)文件和跟蹤文件(trace file),按照參數(shù)設(shè)置的語法在告警日志中寫入所有顯式指定的參數(shù)設(shè)置
  • 在這一階段,實(shí)例還沒有關(guān)聯(lián)到數(shù)據(jù)庫。NOMOUNT 狀態(tài)的使用場景包括數(shù)據(jù)庫創(chuàng)建以及備份與恢復(fù)操作。

    加載數(shù)據(jù)庫

    實(shí)例通過加載數(shù)據(jù)庫與其進(jìn)行關(guān)聯(lián)。

    加載數(shù)據(jù)庫時(shí),實(shí)例通過初始化參數(shù) CONTROL_FILES 獲取數(shù)據(jù)庫控制文件 的名稱并打開這些文件。Oracle 數(shù)據(jù)庫讀取控制文件,獲取數(shù)據(jù)文件和在線重做日志文件的名稱,在打開數(shù)據(jù)庫時(shí)需要訪問這些文件。

    加載之后,數(shù)據(jù)庫處于關(guān)閉狀態(tài),只允許管理員訪問。管理員可以在保持?jǐn)?shù)據(jù)庫關(guān)閉的同時(shí)執(zhí)行一些特定的維護(hù)操作。但是,此時(shí)數(shù)據(jù)庫還不能執(zhí)行一些常規(guī)操作。

    如果 Oracle 數(shù)據(jù)庫允許多個(gè)實(shí)例同時(shí)加載相同的數(shù)據(jù)庫,初始化參數(shù) CLUSTER_DATABASE 可以設(shè)置多個(gè)實(shí)例訪問該數(shù)據(jù)庫。具體的行為取決于該參數(shù)的值:

    • 如果第一個(gè)加載數(shù)據(jù)庫的實(shí)例的 CLUSTER_DATABASE 設(shè)置為 false(默認(rèn)值),只有該實(shí)例能夠加載數(shù)據(jù)庫。
    • 如果第一個(gè)加載數(shù)據(jù)庫的實(shí)例的 CLUSTER_DATABASE 設(shè)置為 true,其他實(shí)例在 CLUSTER_DATABASE 也設(shè)置為 true 時(shí)可以加載該數(shù)據(jù)庫。可以同時(shí)加載同一個(gè)數(shù)據(jù)庫的實(shí)例數(shù)量由創(chuàng)建數(shù)據(jù)庫時(shí)的預(yù)定義值決定。

    打開數(shù)據(jù)庫

    打開一個(gè)已加載的數(shù)據(jù)庫意味著可以對其執(zhí)行常規(guī)的操作。

    任何有效的用戶都可以連接到一個(gè)打開的數(shù)據(jù)庫,并且訪問其中的信息。通常來說,數(shù)據(jù)庫管理員負(fù)責(zé)打開數(shù)據(jù)庫。

    打開數(shù)據(jù)庫時(shí), Oracle 數(shù)據(jù)庫將會(huì)執(zhí)行以下操作:

    • 打開撤銷表空間(undo tablespace)之外的其他表空間的在線數(shù)據(jù)文件

      如果一個(gè)表空間在數(shù)據(jù)庫關(guān)閉之前處于離線(offline)狀態(tài),重新打開數(shù)據(jù)庫時(shí),該表空間和相應(yīng)的數(shù)據(jù)文件仍然處于離線狀態(tài)。

    • 獲取一個(gè)撤銷表空間

      如果存在多個(gè)撤銷表空間,由初始化參數(shù) UNDO_TABLESPACE 決定使用哪個(gè)表空間。如果沒有設(shè)置該參數(shù),使用第一個(gè)可用的撤銷表空間。

    • 打開在線重做日志文件

    只讀模式

    默認(rèn)情況下,數(shù)據(jù)庫以讀/寫模式打開。在這種模式下,用戶可以修改數(shù)據(jù),產(chǎn)生重做日志項(xiàng)。另外,數(shù)據(jù)庫可以以只讀模式打開,防止用戶事務(wù)修改數(shù)據(jù)。

    注意:默認(rèn)情況下,物理備用數(shù)據(jù)庫以只讀模式打開。

    只讀模式下的數(shù)據(jù)庫只能執(zhí)行只讀事務(wù),不能寫入數(shù)據(jù)文件或者在線重做日志文件。不過,數(shù)據(jù)庫仍然能夠執(zhí)行恢復(fù)操作或者不產(chǎn)生重做日志的操作。例如,只讀模式支持以下操作:

    • 將數(shù)據(jù)文件離線或者在線。但是,不能將永久表空間離線。
    • 恢復(fù)離線的數(shù)據(jù)文件和表空間。
    • 修改控制文件中關(guān)于數(shù)據(jù)庫狀態(tài)的信息。
    • 使用 CREATE TEMPORARY TABLESPACE 語句創(chuàng)建的臨時(shí)表空間允許讀寫操作。
    • 寫入操作系統(tǒng)的審計(jì)文件、跟蹤文件以及告警日志。
    數(shù)據(jù)庫文件檢查

    如果打開數(shù)據(jù)庫時(shí),任何數(shù)據(jù)文件或重做日志文件不存在,或者它們存在但是一致性檢測失敗,數(shù)據(jù)庫將會(huì)返回一個(gè)錯(cuò)誤。此時(shí)需要執(zhí)行介質(zhì)恢復(fù)。

    關(guān)閉數(shù)據(jù)庫與實(shí)例

    通常來說,管理員在執(zhí)行維護(hù)操作或其他管理任務(wù)時(shí)手動(dòng)關(guān)閉數(shù)據(jù)庫。可以使用 SQL*Plus 的 SHUTDOWN 命令或者 Enterprise Manager 執(zhí)行這些操作。

    下圖演示了數(shù)據(jù)庫從打開狀態(tài)到一致性關(guān)閉的過程。

    圖 13-4 實(shí)例與數(shù)據(jù)庫關(guān)閉順序

    Oracle 數(shù)據(jù)庫從打開到一致性關(guān)閉時(shí)自動(dòng)執(zhí)行以下操作。
    表 13-3 一致性關(guān)閉的步驟

    階段加載狀態(tài)描述更多內(nèi)容
    1關(guān)閉數(shù)據(jù)庫數(shù)據(jù)庫處于加載狀態(tài),但是在線數(shù)據(jù)文件和重做日志文件被關(guān)閉。關(guān)閉數(shù)據(jù)庫
    2卸載數(shù)據(jù)庫實(shí)例處于啟動(dòng)狀態(tài),但是不再關(guān)聯(lián)數(shù)據(jù)庫的控制文件。卸載數(shù)據(jù)庫
    3關(guān)閉實(shí)例實(shí)例被關(guān)閉,不再處于啟動(dòng)狀態(tài)。關(guān)閉實(shí)例

    Oracle 數(shù)據(jù)庫在出現(xiàn)實(shí)例失敗或者執(zhí)行 SHUTDOWN ABORT (立即終止實(shí)例)命令時(shí),不會(huì)執(zhí)行以上操作。

    關(guān)閉模式

    具有 SYSDBA 或者 SYSOPER 權(quán)限的數(shù)據(jù)庫管理員可以使用 SQL*Plus 的 SHUTDOWN 命令或 Enterprise Manager 關(guān)閉數(shù)據(jù)庫。SHUTDOWN 命令包含了不同的關(guān)閉選項(xiàng)。

    下表總結(jié)了不同的關(guān)閉模式。
    表 13-4 數(shù)據(jù)庫關(guān)閉模式

    數(shù)據(jù)庫行為ABORTIMMEDIATETRANSACTIONALNORMAL
    運(yùn)行新用戶連接
    等待當(dāng)前會(huì)話結(jié)束
    等待當(dāng)前事務(wù)結(jié)束
    執(zhí)行檢查點(diǎn)并關(guān)閉打開的文件

    不同的 SHUTDOWN 語句包括:

    • SHUTDOWN ABORT

      這種關(guān)閉模式用于緊急情況,例如其他模式無法關(guān)閉實(shí)例時(shí)。這種模式速度最快。但是,隨后再打開數(shù)據(jù)庫時(shí)需要更長的時(shí)間,因此需要執(zhí)行實(shí)例恢復(fù)以確保數(shù)據(jù)文件的一致性。

      由于 SHUTDOWN ABORT 命令不對打開的數(shù)據(jù)文件執(zhí)行檢查點(diǎn)操作,重新打開數(shù)據(jù)庫時(shí)必須執(zhí)行實(shí)例恢復(fù)。其他的關(guān)閉模式在重新打開數(shù)據(jù)庫時(shí)不需要執(zhí)行實(shí)例的恢復(fù)。

      注意:在 CDB 中,針對 PDB 執(zhí)行的 SHUTDOWN ABORT 命令等價(jià)于非 CDB 上的 SHUTDOWN IMMEDIATE 命令。

    • SHUTDOWN IMMEDIATE

      這種關(guān)閉模式是除了 SHUTDOWN ABORT 之外的最快方式。Oracle 數(shù)據(jù)庫立即終止任何正在執(zhí)行的 SQL 語句并且斷開用戶的連接。系統(tǒng)終止所有正在進(jìn)行的事務(wù),并且回滾未提交的更改。

    • SHUTDOWN TRANSACTIONAL

    這種關(guān)閉模式不允許用戶開始新的事務(wù),但會(huì)等待所有當(dāng)前正在執(zhí)行的事務(wù)結(jié)束,然后關(guān)閉數(shù)據(jù)庫。這種模式可能需要等待很長的時(shí)間才能完成。

    • SHUTDOWN NORMAL

    這是默認(rèn)的關(guān)閉模式。數(shù)據(jù)庫在關(guān)閉之前等待所有連接的用戶斷開連接。

    關(guān)閉數(shù)據(jù)庫

    關(guān)閉數(shù)據(jù)庫的操作分為正常關(guān)閉和異常關(guān)閉。

    正常關(guān)閉

    當(dāng)數(shù)據(jù)庫使用非 ABORT 模式關(guān)閉時(shí),會(huì)將 SGA 中的數(shù)據(jù)寫入數(shù)據(jù)文件和在線重做日志文件。

    然后,數(shù)據(jù)庫關(guān)閉在線數(shù)據(jù)文件和重做日志文件。離線表空間中的離線數(shù)據(jù)文件已經(jīng)處于關(guān)閉狀態(tài)。當(dāng)數(shù)據(jù)庫重新打開時(shí),原來的離線表空間仍然處于離線狀態(tài)。

    此時(shí),數(shù)據(jù)庫已經(jīng)關(guān)閉,不接受正常訪問。但是控制文件仍然處于打開狀態(tài)。

    異常關(guān)閉

    如果使用 SHUTDOWN ABORT 命令關(guān)閉數(shù)據(jù)庫或者數(shù)據(jù)庫異常終止時(shí),實(shí)例瞬間停止并關(guān)閉數(shù)據(jù)庫。

    異常關(guān)閉時(shí),Oracle 數(shù)據(jù)庫不會(huì)將 SGA 緩存中的數(shù)據(jù)寫入數(shù)據(jù)文件和重做日志文件。隨后重新打開數(shù)據(jù)庫時(shí)需要執(zhí)行實(shí)例恢復(fù),Oracle 自動(dòng)執(zhí)行實(shí)例的恢復(fù)操作。

    卸載數(shù)據(jù)庫

    在關(guān)閉數(shù)據(jù)庫之后,Oracle 將會(huì)卸載數(shù)據(jù)庫,將其與實(shí)例分離。

    卸載數(shù)據(jù)庫之后,Oracle 關(guān)閉數(shù)據(jù)庫的控制文件。此時(shí),實(shí)例仍然存在于內(nèi)存之中。

    關(guān)閉實(shí)例

    關(guān)閉數(shù)據(jù)庫的最后一步就是關(guān)閉實(shí)例。關(guān)閉實(shí)例時(shí),系統(tǒng)釋放 SGA 內(nèi)存,并停止后臺進(jìn)程。

    在異常情況下,實(shí)例可能沒有關(guān)閉干凈。內(nèi)存中仍然存在一些內(nèi)存結(jié)構(gòu),或者某個(gè)后臺進(jìn)程仍未終止。如果之前的實(shí)例仍然部分存在,后續(xù)的實(shí)例可能會(huì)啟動(dòng)失敗。此時(shí),可以通過刪除之前實(shí)例的殘余并重新啟動(dòng)一個(gè)新實(shí)例,或者使用 SHUTDOWN ABORT 語句關(guān)閉之前的實(shí)例,強(qiáng)制啟動(dòng)一個(gè)新的實(shí)例。

    某些情況下,進(jìn)程的清除可能會(huì)遇到錯(cuò)誤,導(dǎo)致進(jìn)程監(jiān)控進(jìn)程(PMON)或者實(shí)例的終止。動(dòng)態(tài)初始化參數(shù) INSTANCE_ABORT_DELAY_TIME 用于指定發(fā)生內(nèi)部實(shí)例失敗時(shí)延遲關(guān)閉的時(shí)間(秒)。延遲時(shí)間之內(nèi),管理員可以介入處理。當(dāng)發(fā)生延遲的實(shí)例終止時(shí),數(shù)據(jù)庫在告警日志中寫入一條消息。某些情況下,通過允許隔離某些數(shù)據(jù)庫資源,可以避免實(shí)例被終止。

    檢查點(diǎn)

    檢查點(diǎn)(checkpoint)對于一致性數(shù)據(jù)庫關(guān)閉、實(shí)例恢復(fù)以及常規(guī)數(shù)據(jù)庫操作都至關(guān)重要。

    檢查點(diǎn)操作具有以下含義:

    • 檢查點(diǎn)位置(checkpoint position),它表示重做日志流中的系統(tǒng)更改號(SCN),實(shí)例恢復(fù)必須從該檢查點(diǎn)位置開始

      檢查點(diǎn)位置由數(shù)據(jù)庫緩沖區(qū)高速緩存中最早的臟塊決定。檢查點(diǎn)位置相當(dāng)于一個(gè)指向重做流的指針,它的信息存儲(chǔ)在控制文件以及每個(gè)數(shù)據(jù)文件的頭部。

    • 將數(shù)據(jù)庫緩沖區(qū)高速緩存中被修改過的緩存數(shù)據(jù)寫入磁盤

    檢查點(diǎn)的作用

    Oracle 數(shù)據(jù)庫使用檢查點(diǎn)實(shí)現(xiàn)多個(gè)功能,包括:

    • 減少實(shí)例或介質(zhì)失敗時(shí)的恢復(fù)時(shí)間
    • 確保數(shù)據(jù)庫定期將緩沖區(qū)高速緩存中的臟數(shù)據(jù)寫入磁盤
    • 確保數(shù)據(jù)庫在一致性關(guān)閉時(shí)將所有已提交的數(shù)據(jù)寫入磁盤

    檢查點(diǎn)觸發(fā)時(shí)機(jī)

    檢查點(diǎn)進(jìn)程(CKPT)負(fù)責(zé)將檢查點(diǎn)寫入數(shù)據(jù)文件頭部以及控制文件中。

    許多場景都會(huì)導(dǎo)致檢查點(diǎn)發(fā)生。例如,Oracle 數(shù)據(jù)庫包含以下檢查點(diǎn)類型:

    • 線程檢查點(diǎn)

      數(shù)據(jù)庫在完成特定操作之前將某個(gè)重做線程修改的緩存數(shù)據(jù)寫入磁盤。一個(gè)數(shù)據(jù)庫的所有實(shí)例上的線程檢查點(diǎn)集合組成數(shù)據(jù)庫檢查點(diǎn)。線程檢查點(diǎn)在以下情況下觸發(fā):

      • 一致性數(shù)據(jù)庫關(guān)閉
      • 執(zhí)行 ALTER SYSTEM CHECKPOINT 語句
      • 在線重做日志切換
      • 執(zhí)行 ALTER DATABASE BEGIN BACKUP 語句
    • 表空間和數(shù)據(jù)文件檢查點(diǎn)

    數(shù)據(jù)庫在完成特定操作之前將所有重做線程修改的緩存數(shù)據(jù)寫入磁盤。表空間檢查點(diǎn)包含一組數(shù)據(jù)文件檢查點(diǎn),每個(gè)數(shù)據(jù)文件一個(gè)檢查點(diǎn)。這些檢查點(diǎn)的觸發(fā)事件包括:將表空間設(shè)置為只讀或者正常離線,收縮數(shù)據(jù)文件,或者執(zhí)行 ALTER TABLESPACE BEGIN BACKUP 命令。

    • 增量檢查點(diǎn)

    增量檢查點(diǎn)是一種線程檢查點(diǎn),作用包括避免在線重做日志切換時(shí)的大量數(shù)據(jù)塊寫入。DBW 至少每三秒執(zhí)行一次檢查,判斷是否需要寫入數(shù)據(jù)。當(dāng) DBW 將臟緩存寫磁盤時(shí),同時(shí)推進(jìn)檢查點(diǎn)位置,使得 CKPT 將檢查點(diǎn)位置寫入控制文件,但不會(huì)寫入數(shù)據(jù)文件頭部。

    其他類型的檢查點(diǎn)包括實(shí)例與介質(zhì)恢復(fù)檢查點(diǎn),以及刪除或截?cái)嗄J綄ο髸r(shí)的檢查點(diǎn)。

    實(shí)例恢復(fù)

    實(shí)例恢復(fù)(Instance recovery)是將在線重做日志文件中的記錄應(yīng)用到數(shù)據(jù)文件的過程,用于重建最近的檢查點(diǎn)之后的數(shù)據(jù)變更。

    當(dāng)管理員嘗試打開一個(gè)之前未能一致性關(guān)閉的數(shù)據(jù)庫時(shí),系統(tǒng)自動(dòng)執(zhí)行實(shí)例的恢復(fù)。

    實(shí)例恢復(fù)的作用

    實(shí)例恢復(fù)可以確保數(shù)據(jù)庫在發(fā)生實(shí)例失敗之后能夠恢復(fù)到一致性的狀態(tài)。數(shù)據(jù)對于變更的管理方式,導(dǎo)致數(shù)據(jù)庫文件可能會(huì)處于一個(gè)非一致性的狀態(tài)。

    日志線程(redo thread)是一個(gè)實(shí)例產(chǎn)生的所有變更記錄。單實(shí)例數(shù)據(jù)庫只有一個(gè)日志線程,而 Oracle RAC 數(shù)據(jù)庫包含多個(gè)日志線程,每個(gè)實(shí)例一個(gè)日志線程。

    當(dāng)事務(wù)被提交時(shí),日志寫入進(jìn)程(LGWR)將內(nèi)存中的重做日志項(xiàng)和該事務(wù)的 SCN 同時(shí)寫入在線重做日志。但是,數(shù)據(jù)寫入(DBW)進(jìn)程以系統(tǒng)認(rèn)為的高效方式將修改后的數(shù)據(jù)塊寫入數(shù)據(jù)文件。因此,未提交的更改可能會(huì)臨時(shí)存在數(shù)據(jù)文件中,同時(shí)已提交的修改有可能未寫入數(shù)據(jù)文件。

    如果數(shù)據(jù)庫位于打開狀態(tài)時(shí)發(fā)生實(shí)例失敗(可能是由于 SHUTDOWN ABORT 語句或異常終止),將會(huì)導(dǎo)致以下狀況:

    • 已提交的數(shù)據(jù)塊還沒有寫入數(shù)據(jù)文件,只記錄在在線重做日志中。這些變更必須重新應(yīng)用到數(shù)據(jù)文件中。
    • 數(shù)據(jù)文件中包含一些實(shí)例失敗時(shí)未提交的變更。這些變更必須進(jìn)行回滾,以確保事務(wù)的一致性。

    實(shí)例恢復(fù)只利用在線重做日志文件和當(dāng)前在線數(shù)據(jù)文件執(zhí)行數(shù)據(jù)文件的同步,確保它們的一致性。

    實(shí)例恢復(fù)的時(shí)間

    是否需要執(zhí)行實(shí)例恢復(fù)取決于日志線程的狀態(tài)。

    當(dāng)數(shù)據(jù)庫實(shí)例以讀寫模式打開時(shí),對應(yīng)的日志線程被標(biāo)記為打開狀態(tài),當(dāng)實(shí)例一致性關(guān)閉時(shí),日志線程被標(biāo)記為關(guān)閉。如果日志線程在控制文件中是打開狀態(tài),但是沒有對應(yīng)的活動(dòng)實(shí)例,數(shù)據(jù)庫需要執(zhí)行實(shí)例恢復(fù)。

    Oracle 數(shù)據(jù)庫在以下情況下自動(dòng)執(zhí)行實(shí)例恢復(fù):

    • 單實(shí)例數(shù)據(jù)庫失敗后,或者 Oracle RAC 數(shù)據(jù)庫的所有實(shí)例失敗后,首次打開數(shù)據(jù)庫。這種形式的實(shí)例恢復(fù)也稱為崩潰恢復(fù)。Oracle 數(shù)據(jù)庫同時(shí)恢復(fù)所有失敗實(shí)例的在線重做日志線程。
    • Oracle RAC 數(shù)據(jù)庫的部分(非全部)實(shí)例失敗 。集群中某個(gè)存活實(shí)例自動(dòng)執(zhí)行實(shí)例恢復(fù)操作。

    后臺進(jìn)程 SMON 負(fù)責(zé)執(zhí)行實(shí)例恢復(fù),自動(dòng)應(yīng)用在線重做日志。整個(gè)過程不需要管理員介入。

    檢查點(diǎn)的重要性

    實(shí)例恢復(fù)時(shí),使用檢查點(diǎn)決定需要應(yīng)用到數(shù)據(jù)文件中的變更。檢查點(diǎn)位置確保了所有 SCN 小于檢查點(diǎn) SCN 的已提交變更都已保存到數(shù)據(jù)文件中。

    下圖描繪了在線重做日志中的日志線程。

    圖 13-5 在線重做日志中的檢查點(diǎn)位置

    在執(zhí)行實(shí)例恢復(fù)時(shí),數(shù)據(jù)庫必須應(yīng)用檢查點(diǎn)位置和日志線程終點(diǎn)之間的所有變更。如圖 13-5 所示,某些變更可能已經(jīng)寫入了數(shù)據(jù)文件。但是,只有 SCN 小于檢查點(diǎn)位置的變更確認(rèn)已經(jīng)寫入磁盤之中。

    實(shí)例恢復(fù)步驟

    實(shí)例恢復(fù)的第一步稱為緩存恢復(fù)(cache recovery)或前滾(rolling forward),將在線重做日志中的所有變更重新應(yīng)用到數(shù)據(jù)文件中。

    由于在線重做日志中包含了撤銷數(shù)據(jù)(undo data),前滾操作也會(huì)重建相應(yīng)的撤銷段(undo segment)。前滾操作應(yīng)用在線重做日志文件將數(shù)據(jù)庫恢復(fù)到實(shí)例失敗之前的狀態(tài)。完成前滾操作之后,數(shù)據(jù)塊中包含了在線重做日志文件中的所有已提交變更。這些數(shù)據(jù)文件中可能還包含一些實(shí)例失敗之前寫入的未提交變更,或者緩存恢復(fù)時(shí)從在線重做日志中引入的未提交變更。

    前滾之后,未提交的變更需要回滾。Oracle 數(shù)據(jù)庫使用檢查點(diǎn)位置確保所有 SCN 小于檢查點(diǎn) SCN 的已提交變更已經(jīng)寫入磁盤。Oracle 數(shù)據(jù)庫應(yīng)用撤銷塊 回滾未提交的變更(包括實(shí)例失敗之前寫入的變更和緩存恢復(fù)時(shí)引入的變更)。這個(gè)階段稱為回滾(rolling back)或者事務(wù)恢復(fù)(transaction recovery)。

    下圖演示了數(shù)據(jù)庫實(shí)例恢復(fù)的兩個(gè)必要步驟:前滾和回滾。

    圖 13-6 基本實(shí)例恢復(fù)操作:前滾和回滾

    Oracle 數(shù)據(jù)庫可以根據(jù)需要同時(shí)回滾多個(gè)事務(wù)。實(shí)例失敗時(shí)的所有活動(dòng)事務(wù)都被標(biāo)記為終止。新的事務(wù)可以回滾各自的數(shù)據(jù)塊以獲取所需的數(shù)據(jù),而不需要等待 SMON 進(jìn)程回滾被終止的事務(wù)。

    參數(shù)文件

    啟動(dòng)數(shù)據(jù)庫實(shí)例時(shí),Oracle 數(shù)據(jù)庫必須讀取一個(gè)服務(wù)器參數(shù)文件(推薦方式)或者一個(gè)文本初始化參數(shù)文件(傳統(tǒng)遺留方式)。這些文件中包含了一個(gè)配置參數(shù)的列表。

    手動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫時(shí),必須使用一個(gè)參數(shù)文件啟動(dòng)實(shí)例,然后執(zhí)行 CREATE DATABASE 語句。實(shí)例和參數(shù)文件可以獨(dú)立于數(shù)據(jù)庫而存在。

    初始化參數(shù)

    初始化參數(shù)(Initialization parameter)是一些可以影響實(shí)例操作的配置參數(shù)。實(shí)例在啟動(dòng)時(shí)讀取參數(shù)文件中的初始化參數(shù)。

    Oracle 數(shù)據(jù)庫提供了許多初始化參數(shù),用于優(yōu)化不同環(huán)境下的操作。只有少數(shù)參數(shù)需要顯式設(shè)置,通常只需要使用默認(rèn)值即可。

    初始化參數(shù)分組

    初始化參數(shù)可以按照功能分為不同的組。

    大部分初始化參數(shù)屬于以下分組之一:

    • 設(shè)置實(shí)體項(xiàng)目(例如文件或目錄)的參數(shù)
    • 設(shè)置進(jìn)程限制、數(shù)據(jù)庫資源限制、或者數(shù)據(jù)庫自身限制的參數(shù)
    • 影響容量的參數(shù),例如 SGA 的大小(這些參數(shù)被稱為可變參數(shù))

    數(shù)據(jù)庫管理員特別關(guān)注可變參數(shù),因?yàn)樗麄兛梢酝ㄟ^這些參數(shù)優(yōu)化數(shù)據(jù)庫的性能。

    基本參數(shù)與高級參數(shù)

    初始化參數(shù)可以分為兩類:基本參數(shù)和高級參數(shù)。

    通常來說,管理員需要設(shè)置并優(yōu)化大約 30 個(gè)基本的參數(shù),以達(dá)到合理的性能。基本參數(shù)用于設(shè)置一些特性,例如數(shù)據(jù)庫名稱、控制文件的位置、數(shù)據(jù)庫塊大小以及撤銷表空間。

    在極少數(shù)情況下,管理員需要修改高級參數(shù),以便獲得最佳性能。DBA 專家通過可以高級參數(shù)調(diào)整數(shù)據(jù)庫的行為,以滿足特定的需求。

    Oracle 數(shù)據(jù)庫在安裝軟件的啟動(dòng)初始化參數(shù)文件中提供了參數(shù)值,或者可以通過數(shù)據(jù)庫配置助手(DBCA)創(chuàng)建這些參數(shù)。管理員可以根據(jù)自己的配置需求或者調(diào)優(yōu)方案,修改 Oracle 提供的這些初始化參數(shù),也可以增加其他參數(shù)。對于參數(shù)文件中沒有涉及的相關(guān)初始化參數(shù),Oracle 數(shù)據(jù)庫提供默認(rèn)值。

    服務(wù)器參數(shù)文件

    服務(wù)參數(shù)文件(server parameter file)是初始化參數(shù)的一個(gè)存儲(chǔ)庫。

    服務(wù)器參數(shù)文件具有以下主要特征:

    • 只能由 Oracle 數(shù)據(jù)庫讀寫服務(wù)器參數(shù)文件。
    • 一個(gè)數(shù)據(jù)庫只能有一個(gè)服務(wù)器參數(shù)文件。該文件必須存放在數(shù)據(jù)庫服務(wù)器主機(jī)中。
    • 服務(wù)器參數(shù)文件是一個(gè)二進(jìn)制文件,不能使用文本編輯器進(jìn)行修改。
    • 服務(wù)器參數(shù)文件中的初始化參數(shù)是永久存儲(chǔ)的。在數(shù)據(jù)庫實(shí)例運(yùn)行時(shí)對參數(shù)所做的任何更改在實(shí)例關(guān)閉和啟動(dòng)后仍然生效。

    服務(wù)器參數(shù)文件使得客戶端應(yīng)用不再需要維護(hù)多個(gè)文本初始化參數(shù)文件。服務(wù)器參數(shù)文件通過 CREATE SPFILE 語句從文本初始化參數(shù)文件創(chuàng)建。它可以通過數(shù)據(jù)庫配置助手直接創(chuàng)建。

    文本初始化參數(shù)文件

    文本初始化參數(shù)文件(text initialization parameter file)是一個(gè)文本文件,內(nèi)容是一個(gè)初始化參數(shù)的列表。

    這種參數(shù)文件是歷史遺留的實(shí)現(xiàn)方式,它具有以下主要特點(diǎn):

    • 當(dāng)啟動(dòng)或者關(guān)閉數(shù)據(jù)庫時(shí),文本初始化參數(shù)文件必須位于連接到數(shù)據(jù)庫的客戶端主機(jī)中。
    • 文本初始化參數(shù)文件時(shí)一個(gè)文本文件,而不是二進(jìn)制文件。
    • Oracle 數(shù)據(jù)庫可以讀取文本初始化參數(shù)文件,但是不能寫入該文件。要想修改參數(shù)的值,必須通過文本編輯器手動(dòng)進(jìn)行修改。
    • 使用 ALTER SYSTEM 語句修改的初始化參數(shù)值只在當(dāng)前實(shí)例中生效。必須手動(dòng)更新文件初始化參數(shù)文件并重啟實(shí)例才能永久生效。

    文本初始化參數(shù)文件中包含一系列 key=value 配置,每行一個(gè)配置。例如,以下是某個(gè)參數(shù)文件中的部分內(nèi)容:

    db_name=sample control_files=/disk1/oradata/sample_cf.dbf db_block_size=8192 open_cursors=52 undo_management=auto shared_pool_size=280M pga_aggregate_target=29M . . .

    為了說明文本參數(shù)文件可能帶來的管理問題,假設(shè)你使用了計(jì)算機(jī) clienta 和 clientb,并且需要能夠從任意一個(gè)計(jì)算機(jī)上啟動(dòng)數(shù)據(jù)庫。此時(shí),每個(gè)計(jì)算機(jī)上都需要一個(gè)單獨(dú)的文本初始化參數(shù)文件,如圖 13-7 所示。 服務(wù)參數(shù)文件可以解決參數(shù)文件的分散存儲(chǔ)問題。

    圖 13-7 多個(gè)初始化參數(shù)文件

    修改初始化參數(shù)

    管理員可以通過修改初始化參數(shù)來調(diào)整數(shù)據(jù)庫的行為。參數(shù)按照修改方式分為靜態(tài)(static)參數(shù)和動(dòng)態(tài)(dynamic)參數(shù)。

    下列表格總結(jié)了它們的不同之處。

    表 13-5 靜態(tài)初始化參數(shù)和動(dòng)態(tài)初始化參數(shù)

    特性靜態(tài)參數(shù)動(dòng)態(tài)參數(shù)
    需要修改參數(shù)文件
    需要重啟實(shí)例才能生效
    在 Oracle Database Reference 中顯示為“Modifiable”
    只能修改數(shù)據(jù)庫或?qū)嵗嚓P(guān)的參數(shù)

    靜態(tài)參數(shù)包括 DB_BLOCK_SIZE、DB_NAME 以及 COMPATIBLE。動(dòng)態(tài)參數(shù)分為會(huì)話級別的參數(shù)(只影響當(dāng)前會(huì)話)和系統(tǒng)級別的參數(shù)(影響數(shù)據(jù)庫和所有會(huì)話)。例如,MEMORY_TARGET 是一個(gè)系統(tǒng)級參數(shù),而 NLS_DATE_FORMAT 是一個(gè)會(huì)話級參數(shù)。

    參數(shù)變更的范圍取決于變更何時(shí)生效。當(dāng)實(shí)例使用服務(wù)器參數(shù)文件啟動(dòng)時(shí),可以使用 ALTER SYSTEM SET 語句選擇以下方式修改系統(tǒng)級參數(shù):

    • SCOPE=MEMORY

      參數(shù)的變更只針對當(dāng)前數(shù)據(jù)庫實(shí)例生效。數(shù)據(jù)庫關(guān)閉并重啟后變更不會(huì)持久化。

    • SCOPE=SPFILE

      參數(shù)的變更只應(yīng)用于服務(wù)器參數(shù)文件,不會(huì)影響當(dāng)前實(shí)例。因此,變更只在實(shí)例重啟之后生效。

      注意:對于那些在 Oracle Database Reference 中標(biāo)識為不可更改的參數(shù),修改時(shí)必須指定 SPFILE 。

    • SCOPE=BOTH

      Oracle 數(shù)據(jù)庫同時(shí)將變更寫入內(nèi)存和服務(wù)器參數(shù)文件。這是數(shù)據(jù)庫使用服務(wù)器參數(shù)文件時(shí)的默認(rèn)修改范圍。

    診斷文件

    Oracle 數(shù)據(jù)庫提供了一個(gè)故障診斷基礎(chǔ)架構(gòu)(fault diagnosability infrastructure),用于防止、檢測、診斷和解決數(shù)據(jù)庫問題。這些問題包括代碼錯(cuò)誤、元數(shù)據(jù)損壞以及客戶數(shù)據(jù)丟失等嚴(yán)重錯(cuò)誤。

    這個(gè)高級的故障診斷基礎(chǔ)架構(gòu)的作用包括:

    • 主動(dòng)發(fā)現(xiàn)問題
    • 檢測到問題后控制損失和系統(tǒng)中斷
    • 減少故障診斷和解決時(shí)間
    • 通過拆分跟蹤文件提高可管理性,允許用戶指定每個(gè)文件的大小,以及保留的最大文件數(shù)量,并且在占用的存儲(chǔ)到達(dá)用戶指定的磁盤空間后關(guān)閉跟蹤
    • 方便客戶與 Oracle 支持人員的交流

    多租戶容器數(shù)據(jù)庫(CDB)與非 CDB 的診斷架構(gòu)不同。本節(jié)內(nèi)容針對非 CDB,除非另有說明。

    自動(dòng)診斷庫

    自動(dòng)診斷庫(ADR)是一個(gè)基于文件的資料庫,用于存儲(chǔ)數(shù)據(jù)庫的診斷數(shù)據(jù),例如跟蹤文件、告警日志、DDL 日志以及健康健康報(bào)告。

    ADR 具有以下主要特點(diǎn):

    • 統(tǒng)一的目錄結(jié)構(gòu)
    • 一致的診斷數(shù)據(jù)格式
    • 統(tǒng)一的工具套件

    以上特性使得客戶和 Oracle 支持人員能夠關(guān)聯(lián)和分析多個(gè)實(shí)例、組件和產(chǎn)品的診斷數(shù)據(jù)。

    ADR 存儲(chǔ)在數(shù)據(jù)庫之外,Oracle 數(shù)據(jù)庫在物理庫不可用時(shí)仍然能夠訪問和管理 ADR。數(shù)據(jù)庫實(shí)例在創(chuàng)建數(shù)據(jù)庫之前創(chuàng)建 ADR。

    問題和事件

    ADR 可以主動(dòng)發(fā)現(xiàn)問題(problems), 它們是數(shù)據(jù)庫中的一些關(guān)鍵錯(cuò)誤。

    關(guān)鍵錯(cuò)誤顯示為內(nèi)部錯(cuò)誤,例如 ORA-600,或者其他嚴(yán)重錯(cuò)誤。每個(gè)問題擁有一個(gè)問題鍵(problem key),它是描述該問題的文本字符串。

    當(dāng)一個(gè)問題多次發(fā)生時(shí),ADR 為每次的錯(cuò)誤創(chuàng)建一個(gè)包含時(shí)間戳的事件(incident)。事件由一個(gè)數(shù)字的事件 ID 唯一確定。當(dāng)一個(gè)事件發(fā)生時(shí), ADR 將會(huì)發(fā)送一個(gè)事件告警(incident alert)到 Enterprise Manager。一個(gè)關(guān)鍵錯(cuò)誤的診斷和解決通常從一個(gè)事件告警開始。

    由于一個(gè)問題可能在短時(shí)間內(nèi)產(chǎn)生多次事件,當(dāng)該事件的次數(shù)到達(dá)一個(gè)特定閾值之后,ADR 將會(huì)采用防洪控制措施。防洪控制事件只會(huì)產(chǎn)生一個(gè)告警日志項(xiàng),而不會(huì)產(chǎn)生事件轉(zhuǎn)儲(chǔ)信息。ADR 通過這種方式通知用戶正在發(fā)生一個(gè)嚴(yán)重的錯(cuò)誤,而不會(huì)因?yàn)楫a(chǎn)生大量的診斷數(shù)據(jù)給系統(tǒng)帶來壓力。

    ADR 目錄結(jié)構(gòu)

    ADR base 是 ADR 的根目錄。

    ADR 根目錄下可以存在多個(gè) ADR 主目錄(ADR home),每個(gè) ADR 主目錄是一個(gè) Oracle 產(chǎn)品或組件的實(shí)例的診斷數(shù)據(jù)所在的根目錄,包括跟蹤文件、轉(zhuǎn)儲(chǔ)文件以及告警日志等等。例如, 在一個(gè)使用了共享存儲(chǔ)和 Oracle ASM 的 Oracle RAC 環(huán)境中,每個(gè)數(shù)據(jù)庫實(shí)例和 Oracle ASM 實(shí)例都擁有各自的 ADR 主目錄。

    圖 13-8 顯示了一個(gè)數(shù)據(jù)庫實(shí)例的 ADR 目錄層次結(jié)構(gòu)。在相同的 ADR 根目錄下,還可以存在其他 Oracle 產(chǎn)品或組件的其他 ADR 主目錄,例如 Oracle ASM 或者 Oracle Net Services。

    圖 13-8 Oracle 數(shù)據(jù)庫實(shí)例的 ADR 目錄結(jié)構(gòu)

    以下是一個(gè) Linux 環(huán)境的示例,當(dāng)你在創(chuàng)建數(shù)據(jù)庫之前使用一個(gè)唯一的 SID 和數(shù)據(jù)庫名稱啟動(dòng)實(shí)例時(shí),Oracle 數(shù)據(jù)庫默認(rèn)在文件系統(tǒng)中創(chuàng)建一個(gè) ADR 目錄結(jié)構(gòu)。SID 和數(shù)據(jù)庫名稱成為了 ADR 主目錄中的文件路徑的一部分。

    示例 13-1 創(chuàng)建 ADR

    % setenv ORACLE_SID osi % echo "DB_NAME=dbn" > init.ora % sqlplus / as sysdba . . . Connected to an idle instance.SQL> STARTUP NOMOUNT PFILE="./init.ora" ORACLE instance started.Total System Global Area 146472960 bytes Fixed Size 1317424 bytes Variable Size 92276176 bytes Database Buffers 50331648 bytes Redo Buffers 2547712 bytesSQL> COL NAME FORMAT a21 SQL> COL VALUE FORMAT a60 SQL> SELECT NAME, VALUE FROM V$DIAG_INFO;NAME VALUE --------------------- -------------------------------------------------------- Diag Enabled TRUE ADR Base /d1/3910926111/oracle/log ADR Home /d1/3910926111/oracle/log/diag/rdbms/dbn/osi Diag Trace /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace Diag Alert /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/alert Diag Incident /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/incident Diag Cdump /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/cdump Health Monitor /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/hm Default Trace File /d1/3910926111/oracle/log ... osi/trace/osi_ora_6825.trc Active Problem Count 0 Active Incident Count 0

    告警日志

    每個(gè)數(shù)據(jù)庫都有一個(gè)告警日志,它是一個(gè) XML 文件,其中包含了數(shù)據(jù)庫消息和錯(cuò)誤的時(shí)間日志。

    告警日志包含以下內(nèi)容:

    • 所有內(nèi)部錯(cuò)誤(ORA-600),塊損壞錯(cuò)誤(ORA-1578)以及死鎖錯(cuò)誤(ORA-60)
    • 數(shù)據(jù)庫管理操作,例如 SQL*Plus 的 STARTUP、
      SHUTDOWN、ARCHIVE LOG 以及 RECOVER 命令
    • 與共享服務(wù)器和調(diào)度進(jìn)程功能相關(guān)的一些消息和錯(cuò)誤
    • 物化視圖自動(dòng)刷新錯(cuò)誤

    Oracle 數(shù)據(jù)庫使用告警日志作為在 Enterprise Manager GUI 中顯示信息的替代方案。如果成功執(zhí)行一個(gè)管理操作,Oracle 數(shù)據(jù)庫將會(huì)在告警日志中寫入一個(gè)帶時(shí)間戳的“已完成”的消息。

    首次啟動(dòng)一個(gè)實(shí)例時(shí),Oracle 數(shù)據(jù)庫在圖 13-8 所示的 alert 子目錄中創(chuàng)建一個(gè)告警日志文件,即使還沒有創(chuàng)建數(shù)據(jù)庫。該文件使用 XML 格式。在 trace 子目錄中存在一個(gè)純文本的告警日志,以下是某個(gè)告警日志的一部分:

    Fri Nov 02 12:41:58 2014 SMP system found. enable_NUMA_support disabled (FALSE) Starting ORACLE instance (normal) CLI notifier numLatches:3 maxDescs:189 LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 2 Number of processor cores in the system is 2 Number of processor sockets in the system is 2 Shared memory segment for instance monitoring created Picked latch-free SCN scheme 3 Using LOG_ARCHIVE_DEST_1 parameter default value as /disk1/oracle/dbs/arch Autotune of undo retention is turned on. IMODE=BR ILAT =10 LICENSE_MAX_USERS = 0 SYS auditing is disabled NOTE: remote asm mode is local (mode 0x1; from cluster type) Starting up: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Advanced Analytics and Real Application Testing options. . . . Using parameter settings in client-side pfile System parameters with nondefault values:processes = 100sessions = 172

    正如示例 13-1所示,可以查詢 V$DIAG_INFO 找到告警日志文件的位置。

    DDL 日志

    DDL 日志(DDL log)的格式及基本特性和告警日志相同,但是只包含了 DDL 語句和相關(guān)細(xì)節(jié)信息。數(shù)據(jù)庫將 DDL 的信息寫入單獨(dú)的文件,以便減少告警日志的復(fù)雜性。

    DDL 日志記錄 DDL 文本,或者一些額外的信息。每個(gè) DDL 語句記錄一條日志。DDL 存儲(chǔ)在 ADR 主目錄下的 log/ddl 子目錄中。

    跟蹤文件

    跟蹤文件(trace file)存儲(chǔ)了用于調(diào)查問題的診斷數(shù)據(jù)。同時(shí),跟蹤文件還可以為應(yīng)用程序或?qū)嵗齼?yōu)化的提供指導(dǎo)。

    跟蹤文件的類型

    每個(gè)服務(wù)器進(jìn)程或后臺進(jìn)程都可以定期寫入一個(gè)關(guān)聯(lián)的跟蹤文件。該文件中包含了進(jìn)程環(huán)境、狀態(tài)、活動(dòng)以及錯(cuò)誤的信息。

    SQL 跟蹤工具也可以創(chuàng)建跟蹤文件,為特定 SQL 語句提供性能相關(guān)的信息。可以以不同的方式為指定客戶端標(biāo)識、服務(wù)、模塊、操作、會(huì)話、實(shí)例或者數(shù)據(jù)庫啟用跟蹤。例如,可以通過執(zhí)行 DBMS_MONITOR 包中的相應(yīng)過程或者設(shè)置事件的方式啟動(dòng)跟蹤。

    跟蹤文件的位置

    ADR 在 trace 子目錄中存儲(chǔ)跟蹤文件。跟蹤文件名稱取決于不同的系統(tǒng),并且使用 .trc 擴(kuò)展名。

    通常來說數(shù)據(jù)庫后臺進(jìn)程的跟蹤文件名稱包含 Oracle SID、后臺進(jìn)程名以及操作系統(tǒng)進(jìn)程編號。mytest_reco_10355.trc 是 一個(gè) RECO 進(jìn)程跟蹤文件的示例。

    服務(wù)器進(jìn)程的跟蹤文件名稱包含 Oracle SID、字符串“ora”以及操作系統(tǒng)進(jìn)程編號。mytest_ora_10304.trc 是一個(gè)服務(wù)器進(jìn)程跟蹤文件的示例。

    有時(shí)候跟蹤文件還擁有一個(gè)跟蹤元數(shù)據(jù)文件,使用擴(kuò)展名 .trm。這些文件中包含了稱為跟蹤映射(trace maps)的結(jié)構(gòu)信息,數(shù)據(jù)庫利用這些信息進(jìn)行搜索和導(dǎo)航。

    跟蹤文件的拆分

    如果設(shè)置了跟蹤文件的大小限制,數(shù)據(jù)庫自動(dòng)將其拆分成最多五個(gè)分段。每個(gè)分段都是獨(dú)立的文件,名稱和活動(dòng)的跟蹤文件一致,只是加上了一個(gè)編號,例如 ora_1234_2.trc。

    每個(gè)分段通常是 MAX_DUMP_FILE_SIZE 參數(shù)的 20% 大小。每當(dāng)所有分段的總大小超過了限制,數(shù)據(jù)庫將會(huì)刪除最早的分段(永遠(yuǎn)不會(huì)刪除第一個(gè)分段,因?yàn)樗诉M(jìn)程初始狀態(tài)的相關(guān)信息),然后創(chuàng)建一個(gè)新的空分段文件。

    診斷轉(zhuǎn)儲(chǔ)文件

    診斷轉(zhuǎn)儲(chǔ)文件(diagnostic dump file)是一種特殊的跟蹤文件,包含了關(guān)于某個(gè)狀態(tài)或結(jié)構(gòu)的詳細(xì)時(shí)間點(diǎn)信息。

    跟蹤往往是連續(xù)的診斷數(shù)據(jù)。與此相反,轉(zhuǎn)儲(chǔ)通常是針對某一事件的一次性診斷數(shù)據(jù)。

    跟蹤轉(zhuǎn)儲(chǔ)與事件

    大多數(shù)跟蹤轉(zhuǎn)儲(chǔ)由事件觸發(fā)。

    當(dāng)一個(gè)事件發(fā)生時(shí),數(shù)據(jù)庫在該事件的事件目錄中寫入一個(gè)或多個(gè)轉(zhuǎn)儲(chǔ)文件。事件轉(zhuǎn)儲(chǔ)文件的名稱中還包含了事件編號。

    創(chuàng)建事件時(shí),應(yīng)用可能會(huì)為某個(gè)操作產(chǎn)生一個(gè)堆轉(zhuǎn)儲(chǔ)或者系統(tǒng)狀態(tài)轉(zhuǎn)儲(chǔ)。這種情況下,數(shù)據(jù)庫將轉(zhuǎn)儲(chǔ)名稱添加到事件文件名之后,而不是默認(rèn)的跟蹤文件名之后。例如,由于一個(gè)進(jìn)程的產(chǎn)生事件時(shí),數(shù)據(jù)庫創(chuàng)建 prod_ora_90348.trc 文件。該事件的轉(zhuǎn)儲(chǔ)操作產(chǎn)生 prod_ora_90348_incident_id.trc 文件,其中 incident_id 是該事件的數(shù)字 ID。隨著該事件創(chuàng)建的堆轉(zhuǎn)儲(chǔ)操作產(chǎn)生一個(gè)堆轉(zhuǎn)儲(chǔ)文件 prod_ora_90348_incident_id_dump_id.trc,其中 dump_id 是跟蹤轉(zhuǎn)儲(chǔ)的數(shù)字 ID。

    總結(jié)

    以上是生活随笔為你收集整理的Oracle 数据库实例介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。