oracle實例管理

oracle實例管理

oracle實例,其實就是oracle instance,在oracle數據庫體系結構中,是組成oracle服務器的重要部分。那爲什麼需要這個instance呢?專業上的一種說法是說oracle instance是用於和操作系統進行聯繫的標識,也就是數據庫和操作系統之間的交互使用的是數據庫實例。換句話說,我們用戶,是通過”操作系統-》數據庫實例-》數據庫”和”操作系統《-數據庫實例《-數據庫”這樣的流程來和oracle數據庫打交道的(儘管現在這樣說有點不完整,因爲其中還有各種工具什麼的)。也就是說,如果沒有oracle instance,我們用戶就無法和數據庫打交道,也談不上管理oracle數據庫了。

那麼,什麼是oracle實例管理呢?
粗略來說,包括了:

  • 對初始化參數文件的管理
  • 啓動database的方式
  • 置爲限制模式
  • 殺死不需要的用戶進程
  • 診斷文件的管理

初始化參數文件

先說說所謂的參數

  • oracle數據庫中有很多參數,這些參數決定着數據庫的一些基本信息
  • 而有些參數,不會在參數文件上顯示,它們採用系統默認值,叫做隱式參數
  • 在參數文件上有這個參數的,叫做顯示參數

參數文件

存放參數的文件分爲兩類,一種是靜態的正文文件pfile,一般文件名爲initSID.ora,另一種是動態的二進制文件spfile,一般文件名爲spfileSID.ora(SID爲實例名,如果沒有,默認使用init.ora)。它們的位置都在$ORACLE_HOME/dbs下,在啓動數據庫時,用戶可以自定義用哪種文件啓動數據庫。而以pfile啓動數據庫和以spfile啓動數據庫時有區別的:

  • 當以pfile啓動時,如果你需要改變一些初始化參數,那麼你只有關閉數據庫,然後跑去文件所在的位置,去改動其參數項,然後重新啓動數據庫
    這裏寫圖片描述
    如圖,如果是沒有initSID.ora,那麼系統在以pfile方式下啓動時會默認使用init.ora
  • 當以spfile啓動時, 要改變初始化參數時,可以動態改動,不需要重啓數據庫。但是要注意,不要手動去更改這個文件,否則,很可能會變成無效文件。除了這些之外,它還是由oracle服務器自動維護的,擁有自我調優的能力。
    這裏寫圖片描述
    用戶還可以利用CREATE SPFILE語句自行創建spfile,下面是個不完整的例子:
    這裏寫圖片描述
    上面的語句會利用默認的pfile文件創建默認的spfile文件。
  • 當用戶需要查看spfile的內容時,是不能直接查看的,需要用點工具,例如spool,
    這裏寫圖片描述
    之後關閉spool

    SQL> spool off

    然後去相應的目錄找到就可以查看了
    這裏寫圖片描述
    然後用vim打開
    這裏寫圖片描述

初始化參數文件的內容

參數文件的內容,毫無疑問就是參數了,這些參數包含有哪些信息呢?

  • 實例名和與該實例相關的數據庫名
  • 控制文件名字和位置
  • 系統全局區的配置,如shared pool的配置
  • 還原段(回滾段)的配置
  • 該實例所能同時啓動的進程數
  • 標準數據塊大小
  • 是否允許DBA遠程登錄

啓動數據庫的方式

這裏寫圖片描述

按參數文件(個人覺得這裏會讓人誤解,不過沒找到好詞)分

  • 直接startup,然後就會經歷一些步驟
    • 首先找到spfileSID來啓動實例
    • 如果找不到,就找默認的spfile來啓動
    • 如果找不到,就找initSID來啓動
    • 如果找不到,就找默認的pfile來啓動
SQL> startup

這樣子啓動,可以看出,是優先使用spfile,也就是動態參數文件。

  • 除此之外,還可以指定參數文件來啓動
SQL> startup pfile=文件名     #注意,文件名要加上路徑,且不需要引號

按啓動狀態分

  • 以非加載模式啓動
SQL> startup nomount

解釋:只啓動實例但不打開數據庫中任何文件
適用場景:只有在創建數據庫時或重建控制文件時使用
工作:啓動所需的全部後臺進程;打開報警文件alertSID.ora和追蹤文件trace

  • 以加載模式啓動
SQL> startup mount

解釋:啓動實例並且打開控制文件
適用場景:特殊的維護期間,如系統表空間的恢復,修改數據文件名,移動數據文件等
工作:將一數據庫與已啓動的實例關聯起來;利用初始化參數文件中的說明鎖定並打開控制文件;讀控制文件以獲取數據文件和重做日誌文件的名字和狀態信息,但不檢查其是否存在

  • 以開啓模式啓動
SQL> startup

上下相同效果

SQL> startup open

解釋:啓動實例,打開控制文件,打開數據庫
適用場景:正常狀態
工作:包括上面兩種所有工作;打開所有聯機數據文件;打開所有聯機重做日誌文件

按讀寫權限分

  • 只讀方式
SQL> alter database open read only;
#可做的事情:
#將數據文件脫機和聯機,但不能對錶空間進行這樣的操作
#執行數據文件和表空間的脫機恢復
#使用本地管理的表空間來執行磁盤排序
#執行查詢
  • 讀寫方式(這是默認狀態)
SQL> alter database open read write;

置爲限制模式

進入該模式的命令

SQL> startup restrict  #如果數據庫還沒運行
SQL> alter system enable restricted session; #如果數據庫運行了

適用場景

  • 維護數據庫結構
  • 數據庫導入和導出

特點

  • 只有擁有restricted session系統權限的用戶才能登錄數據庫
  • 只保證此模式啓動後擁有restricted session系統權限的用戶登錄數據庫,但是在開啓這個模式之前,如果有用戶已經登錄,是不能自動kill掉這個用戶的

關閉數據庫的方式

由於數據庫是允許多個會話,多個事務,過個用戶連接,並且做的事情有時和檢查點有關,所以在關閉一個數據庫時,這些因素必須考慮。根據oracle給出的關閉方式,我們也不難看出這種“級別”關係。所有的關閉方式有一個共性——都是禁止新的鏈接的

normal

#等待所有會話和事務結束,並且會強制檢查點和關閉文件
SQL> shutdown normal   

transactional

#等待事務結束,並且會強制檢查點和關閉文件,但是不會等所有會話結束
SQL> shutdown transactional   

immediate

#會強制檢查點和關閉文件 但是不會等待所有事務和會話結束
SQL> shutdown immediate
#沒提交的數據將自動回滾,重新啓動不需要恢復,但用戶需要重新輸入那些沒有提交的數據

abort

#什麼都不等,直接關了
SQL> shutdown abort

找到並且殺死不需要的用戶進程

步驟:

  • 以數據庫管理員用戶登錄
  • select sid,serial#,username,type from v$session; #查表看看會話信息
  • alter system kill session 'SID,SERIAL#'; #利用找到的信息殺死相應進程

我們可以做個實驗,利用xshell創建兩個會話連接到虛擬機上的linux上,並且登錄進去oracle數據庫,然後一個以sys登錄,一個以scott登錄,然後我們試着kill掉scott用戶進程
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

診斷文件的管理

診斷文件可以獲取數據庫的很多有用信息,特別是當你在管理數據庫時,遇到各種報錯,無從下手時,通常看一下診斷文件,可以有所幫助。通常有3種主要的診斷文件:報警文件alterSID.log後臺進程跟蹤文件background trace files用戶進程跟蹤文件user trace files

報警文件alterSID.log

  • 位置:由BACKGROUND_DUMP_DEST參數定義(這裏提供兩種方法可以獲取)
  • SQL> show parameter BACKGROUND_DUMP_DEST
  • SQL> select value from v$diag_info where name='Diag Trace';
    這裏寫圖片描述
  • 權限:必須由數據庫管理員來管理
  • 建議:作爲一個DBA,應該每天都查看,由下往上看
  • 文件的內容:數據庫啓動或關閉的時間;所有非默認初始化參數;LGWR正在寫的日誌序列號;日誌的切換信息;執行的ALTER語句;創建的表空間和還原段等。

後臺進程跟蹤文件background trace files

  • 位置:同樣在BACKGROUND_DUMP_DEST下,獲取方法同上
  • 文件的內容:任何後臺進程所遇到的錯誤

用戶進程跟蹤文件user trace files

  • 位置:由USER_DUMP_DEST參數定義,可通過show parameter來獲得具體值
  • 作用:追蹤用戶SQL語句的統計信息,包含用戶的錯誤信息
  • 在會話一級需要追蹤SQL語句的統計信息時,需要
    • alter session set SQL_TRACE = TRUE;
  • 在會話一級需要關閉時,需要
    • alter session set SQL_TRACE = FALSE;
  • 同樣可以在實例一級需要開啓或關閉,就修改初始化參數文件的參數來完成
    • SQL_TRACE = TRUE
  • 注意,開啓這個系統開銷會變大
  • 大小:由MAX_DUMP_FILE_SIZE決定

除了上面提到的查看文件位置的辦法外,其實有一個方法會更直接

select name,value from v$parameter where name like '%_dest';

這裏寫圖片描述

最後給出自己總結的一份思維導圖

這裏寫圖片描述

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