Oracle程序員面試分類模擬33_第1頁
Oracle程序員面試分類模擬33_第2頁
Oracle程序員面試分類模擬33_第3頁
Oracle程序員面試分類模擬33_第4頁
Oracle程序員面試分類模擬33_第5頁
已閱讀5頁,還剩16頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Oracle程序員面試分類模擬33簡答題1.

如何清除V$ARCHIVED_LOG視圖中的過期信息?正確答案:在使用RMAN命令(DELETEARCHIVELOGALL;)刪除歸檔信息后V$A(江南博哥)RCHIVED_LOG視圖中的NAME列為空,但是依然可以查詢到這些刪除了的歸檔信息,出現這樣的現象是因為使用RMAN命令在刪除歸檔日志的時候不會清除控制文件中的內容,導致V$ARCHIVED_LOG留下的過期的不完整信息。使用如下的命令可以清除控制文件中關于V$ARCHIVED_LOG的信息:

2.

備庫數據文件異常,物理DG如何恢復?正確答案:有的時候由于備庫空間不足,在主庫添加了數據文件后,導致備庫數據文件的缺失,可能很久之后才發現,但是由于歸檔的缺失等其他原因而導致備庫不能正常應用Redo日志。還有其他情況可能導致備庫的數據文件不能正常ONLNE,在這種情況下,可以在主庫上利用CONVERT命令備份一個數據文件然后復制到備庫即可。若是備庫歸檔文件比較全,則可以直接在備庫創建數據文件后應用Redo日志即可,而不需要從主庫復制數據文件。

恢復過程中的一些關鍵性的命令如下:

3.

什么是熱塊?正確答案:當一個會話需要訪問一個數據塊,而這個數據塊正在被另一個用戶從磁盤讀取到內存中或者這個數據塊正在被另一個會話修改時,當前的會話就需要等待,就會產生一個bufferbusywaits等待,也伴隨著Latch爭用。如果太多的會話去訪問相同的數據塊,那么會導致長時間的bufferbusywaits等待,通常表現形式為CPU使用率很高,但吞吐量很低。造成熱塊的原因可能是數據庫設置或者重復執行的SQL語句頻繁訪問一些相同的數據塊。熱塊產生的原因不盡相同,按照數據塊的類型,可以分成表數據塊、索引數據塊、索引根數據塊、文件頭數據塊和數據塊自身的爭用,不同熱塊類型處理的方式是不同的。下面給出找到熱塊的SQL語句:

4.

RESETLOGS和NORESETLOGS的區別是什么?正確答案:RESETLOGS和NORESETLOGS主要用在兩個地方,第一是在創建控制文件的時候,第二是在打開數據庫的時候。當將控制文件備份到TRACE文件時,可以看到里面包含了兩部分的重建語句,一個是使用RESETLOGS,另一個是使用NORESETLOGS。

備份控制文件的SQL如下:

以下是重建控制文件的命令:

若當前的所有在線日志可用,則在創建控制文件的時候使用NORESETLOGS。若當前的在線日志有所損壞時,則在創建控制文件的時候需要使用RESETLOGS。若使用RESETLOGS則將導致在線日志里的內容丟失,并且所有的備份失效。

在打開數據庫的時候也可以使用RESETLOGS或NOR_ESETLOGS選項。在做了不完全恢復后,RESETLOGS會初始化日志,重置日志序列號(從1開始),并且創建一個新的INCARNATION。可以使用RMAN命令查看INCARNATION的信息:

做不完全恢復必須使用RESETLOGS,但是RESETLOGS也可以做完全恢復。而NORESETLOGS則必須是在做完全恢復時使用。RESETLOGS會重置日志序列號,強制清空或重建在線日志,而NORESETLOGS則不會這么做。

5.

如何處理Oracle中的壞塊?正確答案:(1)壞塊的簡介Oracle數據文件的壞塊可以分為物理壞塊和邏輯壞塊。物理壞塊指的是塊格式本身已經損壞,塊內的數據沒有任何意義。邏輯壞塊指的是塊內的數據在邏輯上存在問題,比如說索引塊的索引值沒有按順序排列導致的邏輯壞塊。物理壞塊一般是由于內存問題、OS問題、I/O子系統問題或硬件引起的,邏輯壞塊一般是由Oracle系統Bug等原因引起的。

壞塊通常是通過Oracle的ORA-01578錯誤報告出來的,詳細的損壞描述會在告警日志中打印出來,“oerrora”對該錯誤的解釋如下:

可能的報錯如下:

那么何時進行數據塊的一致性檢查呢?當一個數據塊被讀或寫的時候,將對塊進行一致性檢查,檢查的內容包括塊的版本、塊在BlockBuffer中的數據塊地址,然后根據要求進行校驗(checksum)。

塊的一致性檢查由DB_BLOCK_CHECKSUM和DB_BLOCK_CHECKING兩個初始化參數控制。DB_BLOCK_CHECKSUM是一種物理檢查,只有在寫入(DBWn常規寫或用戶進程直接路徑寫入)數據文件時,根據一個CHECKSUM算法計算數據塊的校驗和,然后寫入數據塊的一個特定位置,在讀取塊時再進行檢驗,主要是為了防止I/O硬件和I/O子系統的錯誤。DB_BLOCK_CHECKrNG參數主要用于數據塊的邏輯一致性檢查,但只是在塊內,不包括塊間的邏輯檢查,用于防止在內存中損壞或數據損壞。

(2)壞塊的檢測方法壞塊的檢測方法見下表。

壞塊的檢測方法

(3)BMR恢復壞塊如果數據庫只有很少的數據塊被破壞,那么使用塊介質恢復(BlockMediaRecovery,BMR)是較好的塊恢復方法。BMR只能用于恢復物理損壞(PhysicalCorruptions),在數據文件聯機時即可恢復相關壞塊。BMR主要使用BLOCKRECOVER命令進行恢復壞塊,該命令有以下三種使用方式:

1)使用“BLOCKRECOVERCORRUPTIONLIST;”命令恢復在V$DATABASE_BLOCK_CORRUPTION視圖中報告的所有塊。

2)使用“BLOCKRECOVERDATAFILE1BLOCKIO;”命令恢復單個塊,需要指定文件號和塊號。

3)使用“BLOCKRECOVERTABLESPACETS_USERDBAXXX;”命令恢復某個表空間的壞塊,需要指定表空間和數據塊地址。

下面給出幾個恢復示例:

1)恢復3個數據文件的損壞塊:

2)從數據文件復制中恢復一系列塊:

3)從指定的TAG備份中恢復塊:

4)從用于恢復數據到兩天以前的備份中還原、恢復SYSTEM表空間中的兩個塊:

5)運行備份驗證數據庫,修復在V$DATABASE_BLOCK_CORRUPTION中記錄的所有損壞塊:

(4)如何確定壞塊的對象名根據絕對文件號和塊號確定數據塊對象的SQL語句如下:

如下的SQL可以確定段占用的數據塊:

關于壞塊需要注意以下幾點:

1)對于受損的數據塊,僅壞塊上的數據無法被查詢或讀取,其余正常塊的數據依舊可以使用。

2)對于受損的表對象進行聚合等相關運算時會收到錯誤提示,因為壞塊上的數據無法被統計。

3)可以基于RMAN的備份文件實現塊介質恢復,其數據文件無需OFFLINE,成本損失最小,影響最小。

4)對于多個數據塊的損壞,先執行BACKUPVALIDATE校驗數據庫或相應的數據文件以便標記受損的壞塊后,填充V$DATABASE_BLOCK_CORRUPTION后再使用命令“BLOCKRECOVERCORRUPTIONLIST;”一次性恢復所有的壞塊。

5)在默認情況下,存在壞塊的數據文件無法成功備份,也會導致自動備份腳本失敗。

6.

在登記日志文件時為什么必須先寫日志文件,后寫數據庫?正確答案:把對數據的修改寫到數據庫中和把表示這個修改的日志記錄寫到日志文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。如果先寫了數據庫修改,而在運行記錄中沒有登記這個修改,那么以后就無法恢復這個修改了。如果先寫日志,但沒有修改數據庫,那么在恢復時只不過是多執行一次Undo操作,并不會影響數據庫的正確性。所以一定要先寫日志文件,即首先把日志記錄寫到日志文件中,然后寫數據庫的修改。

7.

Oracle如何刪除歸檔日志文件?正確答案:在RMAN工具里刪除歸檔日志文件:

8.

Switchover和Failover的區別?正確答案:一個DG環境中只有兩種角色:Primary和Standby。所謂角色轉換就是讓數琚庫在這兩種角色中切換,切換也分兩種:Switchover和Failover,關于角色切換需要注意以下幾點:

1)Switchover是指主庫轉換成備庫,然后將原備庫轉換成新主庫;而Failover是指將備庫轉換成主庫。

2)使用場合不同:Switchover用于有準備的、計劃之中的切換,通常是系統升級、數據遷移等常態任務;Failover用于意料之外的突發情況,例如異常斷電、自然災難等。

3)數據丟失程度不同:Switchover表示不會丟失數據,Failover通常意味著有部分數據丟失。

4)善后處理的不同:Switchover之后DG環境不會被破壞,仍然有Primary、Standby兩種角色的系統存在,但是Failover之后,DG環境就會被破壞,一般情況下需要重建。

9.

數據庫參數RESOURCE_LIMIT的作用是什么?正確答案:該參數用來啟用或禁用數據庫資源限制(通過PROFILE設定)。關于RESOURCE_LIMIT需要注意以下兩點:

1)用戶所有擁有的PROFILE中有關密碼的限制永遠生效,不受限制。

2)用戶所有擁有的PROFILE中有關資源的限制與RESOURCE_LIMIT參數的設置有關,當為TRUE時生效,當為FALSE時(默認值是FALSE)無效。在Oracle12c之前該參數默認為FALSE,而從12c開始,該參數默認為TRUE。

10.

Cache替換算法有哪些?正確答案:數據可以存放在CPU或者內存中。CPU處理快,但是容量少;內存容量大,但是轉交給CPU處理的速度慢。為此,需要Cache(緩存)來做一個折中。將最有可能調用的數據先從內存調入Cache,CPU再從Cache讀取數據,這樣會快許多。然而,Cache中所存放的數據不是全部有用的。CPU從Cache中讀取到有用數據稱為“命中”。

由于主存中的塊比Cache中的塊多,所以當要從主存中調一個塊到Cache中時,會出現該塊所映射到的一組(或一個)Cache塊已全部被占用的情況。此時,需要被迫騰出其中的某一塊,以接納新調入的塊,這就是替換。

Cache替換算法有RAND算法、FIFO算法、LRU算法、OPT算法和LFU算法。

(1)隨機(RAND)算法隨機算法就是用隨機數發生器產生一個要替換的塊號,將該塊替換出去,此算法簡單、易于實現,而且它不考慮Cache塊過去、現在及將來的使用情況。但是由于沒有利用上層存儲器使用的“歷史信息”、沒有根據訪存的局部性原理,故不能提高Cache的命中率,命中率較低。

(2)先進先出(FIFO)算法先進先出(FirstInFirstOut,FIFO)算法是將最先進入Cache的信息塊替換出去。FIFO算法按調入Cache的先后決定淘汰的順序,選擇最早調入Cache的字塊進行替換,它不需要記錄各字塊的使用情況,比較容易實現,系統開銷小,其缺點是可能會把一些需要經常使用的程序塊(如循環程序)也作為最早進入Cache的塊替換掉,而且沒有根據訪存的局部性原理,故不能提高Cache的命中率。因為最早調入的信息可能以后還要用到,或者經常要用到,如循環程序。此法簡單、方便,利用了主存的“歷史信息”,但并不能說最先進入的就不經常使用,其缺點是不能正確反映程序局部性原理,命中率不高,可能出現一種異常現象。例如,Solar—16/65機Cache采用組相連方式,每組4塊,每塊都設定一個兩位的計數器,當某塊被裝入或被替換時該塊的計數器清為0,而同組的其他各塊的計數器均加1,當需要替換時就選擇計數值最大的塊被替換掉。

(3)近期最少使用(LRU)算法近期最少使用(LeastRecentlyUsed,LRU)算法是將近期最少使用的Cache中的信息塊替換出去。

LRU算法是依據各塊使用的情況,總是選擇那個最近最少使用的塊被替換。這種方法雖然比較好地反映了程序局部性規律,但是這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。LRU算法相對合理,但實現起來比較復雜,系統開銷較大。通常需要對每一塊設置一個稱為計數器的硬件或軟件模塊,用以記錄其被使用的情況。

實現LRU策略的方法有多種,例如計數器法、寄存器棧法及硬件邏輯比較法等,下面簡單介紹計數器法的設計思路。

計數器方法:緩存的每一塊都設置一個計數器。計數器的操作規則如下:

1)被調入或者被替換的塊,其計數器清“0”,而其他的計數器則加“1”。

2)當訪問命中時,所有塊的計數值與命中塊的計數值要進行比較,如果計數值小于命中塊的計數值,則該塊的計數值加“1”;如果塊的計數值大于命中塊的計數值,則數值不變。最后將命中塊的計數器清“0”。

3)需要替換時,則選擇計數值最大的塊被替換。

(4)最優替換(OPT)算法使用最優替換(OPTimalreplacement,OPT)算法時必須先執行一次程序,統計Cache的替換情況。有了這樣的先驗信息,在第二次執行該程序時便可以用最有效的方式來替換,以達到最優的目的。

前面介紹的幾種頁面替換算法主要是以主存儲器中頁面調度情況的歷史信息為依據的,它假設將來主存儲器中的頁面調度情況與過去一段時間內主存儲器中的頁面調度情況是相同的,顯然,這種假設不總是正確的。最好的算法應該是選擇將來最久不被訪問的頁面作為被替換的頁面,這種替換算法的命中率一定是最高的,它就是最優替換算法。

要實現OPT算法,唯一的辦法是讓程序先執行一遍,記錄下實際的頁地址的使用情況。根據這個頁地址的使用情況才能找出當前要被替換的頁面。顯然,這樣做是不現實的。因此,OPT算法只是一種理想化的算法,然而它也是一種很有用的算法。實際上,經常把這種算法用來作為評價其他頁面替換算法好壞的標準。在其他條件相同的情況下,哪一種頁面替換算法的命中率與OPT算法最接近,那么它就是一種比較好的頁面替換算法。

(5)近期最少使用(LFU)算法近期最少使用(LeastFrequentlyUsed,LFU)算法選擇近期最少訪問的頁面作為被替換的頁面。顯然,這是一種非常合理的算法,因為到目前為止最少使用的頁面,很可能也是將來最少訪問的頁面。該算法既充分利用了主存中頁面調度情況的歷史信息,又正確反映了程序的局部特性。但是,這種算法實現起來非常困難,它要為每個頁面設置一個很長的計數器,并且要選擇一個固定的時鐘為每個計數器定時計數。在選擇被替換頁面時,要從所有計數器中找出一個計數值最大的計數器。

11.

動態SQL是什么?正確答案:在PL/SQL開發過程中,使用SQL或PL/SQL可以實現大部分的需求,但是,在某些特殊的情況下,在PL/SQL中使用標準的SQL語句或DML語句不能實現自己的需求,例如需要動態建表或執行某個不確定的操作的時候,就需要動態執行,此外,DDL語句及系統控制語句也不能在PL/SQL中直接使用,這就需要使用動態SQL來實現。因此,在Oracle數據庫開發PL/SQL塊中,可以把SQL分為靜態SQL和動態SQL。所謂靜態SQL指的是在PL/SQL塊中使用的SQL語句在編譯時是明確的,執行的是確定對象。動態SQL是指在PL/SQL塊編譯時SQL語句是不確定的,如根據用戶輸入的參數的不同而執行不同的操作。編譯程序對動態語句部分不進行處理,只是在程序運行時動態地創建語句、對語句進行語法分析并執行該語句。動態SQL允許在SQL客戶模塊或嵌入式宿主程序的執行過程中執行動態生成的SQL語句,動態SQL語句在程序編譯時尚未確定。其中,有些部分需要程序在執行過程中臨時生成的SQL語句,SQL標準引入動態SQL的原因是由于靜態SQL不能提供足夠的編程靈活性。

動態SQL是使用EXECUTEIMMEDIATE語句來實現的。

12.

Oracle用戶的狀態有幾種?分別表示什么含義?正確答案:Oracle用戶的狀態是由密碼來決定的,而Oracle中的密碼是由PROFILE來配置的。PROFILE是口令限制、資源限制的命令集合。當建立數據庫時,Oracle會自動建立名稱為DEFAULT的PROFILE。當創建用戶而沒有指定PROFILE選項時,Oracle就會將DEFAULT分配給用戶。

通過如下的命令可以查出與密碼相關的PROFILE的值:

每個參數的含義如下所示:

(1)FAILED_LOGIN_ATTEMPTS設定登錄到Oracle數據庫時可以失敗的次數。一旦某用戶嘗試登錄數據庫的次數達到該值時,該用戶的賬戶就被鎖定,只能由DBA解鎖。

(2)PASSWORD_LIFE_TIME設定口令的有效時間(天數),一旦超過這一時間,必須重新設口令。缺省為UNLIMITED。

(3)PASSWORD_REUSE_TIME許多系統不許用戶重新啟用過去用過的口令。該資源項設定了一個失效口令要經過多少天,用戶才可以重新使用該口令,默認周期為180天。

(4)PASSWORD_REUSE_MAX重新啟用一個先前用過的口令前必須對該口令進行重新設置的次數(重復用的次數)。

(5)PASSWORD_LOCK_TIME設定賬戶被鎖定的天數(當登錄失敗達到FAILED_LOGIN_ATTEMPTS時)。

(6)PASSWORD_GRACE_TIME設定在口令失效前,給予的重新設置該口令的寬限天數。當口令失效之后,在登錄時會出現警告信息顯示該天數。如果沒有在寬限天數內修改口令,口令將失效。

(7)PASSWORD_VERITY_FUNCTION該資源項允許調用一個PL/SQL來驗證口令。Oracle已提供該應用的腳本,為$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。但是,用戶可以制定自己的驗證腳本。該參數的設定就是PL/SQL函數的名稱,默認為NULL。

用戶的狀態可以由以下腳本查詢獲得:

以上九種可以分為兩大類:①基本狀態;②組合狀態。前五種是基本狀態,后四種是組合狀態。具體分類如圖所示。

用戶狀態的分類

每種狀態的解釋見表。

在Oracle中,若用戶的密碼變為鎖定狀態[LOCKED、LOCKED(TIMED)1時,DBA可以直接執行“ALTERUSER用戶名ACCOUNTUNLOCK”來解鎖。但是,如果用戶的狀態變成過期狀態[EXPIRED、EXPIRED(GRACE)],那么DBA必須要更改用戶的密碼賬戶才能重新使用。但有些時候,因為各種原因并不知道原密碼的明文是什么,這時候可以有如下兩種辦法來更新密碼。

(1)用原密碼的密文來更改密碼

在Oracle10g中,DBAUSERS視圖的PASSWORD字段提供了密碼的密文形式,而在Oracle11g中,該字段被棄用了,內容為空,但是在基表USER$中的PASSWORD字段依然有記錄密文形式。另外,可以通過DBMS_METADATA.GET_DDL包或者expdp.exp命令來獲取創建用戶的語句從而獲取密碼的密文形式。如下的SQL即獲取密碼的密文形式:

獲取了密碼的密文后就可以用如下的命令來修改了,注意:使用密文的命令中多了一個VALUES關鍵字:

所以,即使不知道用戶的原密碼是什么,也可以用它的密文來更改密碼。這樣既保持了密碼不改變,又可以把EXPIRED的狀態更改掉。在MOS文檔ID1543668.1中也有命令可以直接獲取密碼。

(2)直接更新USER$基表

不管用戶的狀態是什么,通過更新USER$表可以讓用戶處于OPEN狀態。

13.

靜態鏈接與動態鏈接有什么區別?正確答案:靜態鏈接是指把要調用的函數或者過程直接鏈接到可執行文件中,成為可執行文件的一部分。換句話說,函數和過程的代碼就在程序的.exe文件中,該文件包含了運行時所需的全部代碼。靜態鏈接的缺點是當多個程序都調用相同函數時,內存中就會存在這個函數的多個復制,這樣就浪費了內存資源。

動態鏈接是相對于靜態鏈接而言的,動態鏈接所調用的函數代碼并沒有被復制到應用程序的可執行文件中去,而是僅僅在其中加入了所調用函數的描述信息(往往是一些重定位信息)。僅當應用程序被裝入內存開始運行時,在操作系統的管理下,才在應用程序與相應的動態鏈接庫(dynanuclinklibrary,簡稱dll)之間建立鏈接關系。當要執行所調用.dll文件中的函數時,根據鏈接產生的重定位信息,操作系統才轉去執行.dll文件中相應的函數代碼。

靜態鏈接的執行程序能夠在其他同類操作系統的機器上直接運行。例如,一個.exe文件是在Windows2000系統上靜態鏈接的,那么將該文件直接復制到另一臺Windows2000的機器上,是可以運行的。而動態鏈接的執行程序則不可以,除非把該.exe文件所需的dll文件都一并復制過去,或者對方機器上也有所需的相同版本的.dll文件,否則是不能保證正常運行的。

14.

差異增量備份和累積增量備份的區別是什么?正確答案:數據庫備份可以分為完全備份和增量備份。完全數據文件備份是包含文件中所有已用數據塊的備份。RMAN將所有塊復制到備份集或映像副本中,僅跳過從未使用的數據文件塊。完全映像副本可準確地再現整個文件的內容。完全備份不能成為增量備份策略的一部分;它也不能作為后續增量備份的基礎。

增量備份就是將那些與前一次備份相比發生變化的數據塊復制到備份集中。通過RMAN可以為單獨的數據文件、表空間或者整個數據庫進行增量備份。增量備份是0級備份,其中包含數據文件中除從未使用的塊之外的所有塊;或者是1級備份,其中僅包含自上次備份以來更改過的那些塊。0級增量備份在物理上與完全備份完全一樣。唯一區別是0級備份可用作1級備份的基礎,但完全備份不可用作1級備份的基礎。要使用增量備份,必須先執行0級增量備份。

通過BACKUP命令中的INCREMENTAL關鍵字可指定增量備份,可以指定INCREMENTALLEVEL[0|1]。在RMAN中建立的增量備份可以具有不同的級別,每個級別都使用一個不小于0的整數來標識,也就是在BACKUP命令中使用LEVEL關鍵字指定的,例如LEVEL=0表示備份級別為0,LEVEL=1表示備份級別為1。每次進行增量備份僅操作那些發生了“變化”的數據塊。RMAN中增量備份有兩種:差異增量備份(DIFFERENTIAL)和累計增量備份(CUMULATIVE),它們的區別見下表。

差異增量備份和累積增量備份的區別

差異增量備份和累計增量備份如下圖所示。

差異增量備份和累計增量備份

1)執行0級增量備份的命令為:RMAN>BACKUPINCREMENTALLEVEL0DATABASE;。

2)執行差異增量備份的命令為:RMAN>BACKUPINCREMENTALLEVEL1DATABASE;。

3)執行累積增量備份的命令為:RMAN>BACKUPINCREMENTALLEVEL1CUMULATIVEDATABASE;。

可以對處于NOARCHIVELOG模式的數據庫執行任何類型的備份(完全或增量)。當然,前提條件是數據庫處于未打開狀態。需要注意的是,數據庫只能恢復到上次備份時的狀態。只有當數據庫處于ARCHIVELOG模式時,才可以將其恢復到上次提交事務處理時的狀態。

15.

OracleHint中的DRIVINGSITE的作用是什么?正確答案:在日常工作中經常會用到分布式數據庫查詢,即通過DBLINK同時查詢本地表和遠程表。分布式查詢一般有兩種處理方式:一種是將遠程表數據取回本地,然后和本地表關聯查詢,獲取最終結果;另一種是將本地表數據傳到遠程和遠程表關聯查詢后,再將關聯結果取回。前一種處理方式可理解為只有一次網絡傳輸操作,比后一種少,也就作為了數據庫的默認處理方式。DRIVING_SITE提示能夠指定執行計劃在遠程還是本地做,使用DRIVING_SITE,特別是本地小結果集,遠程大結果集,最終結果集較小時,那么最好是執行計劃在遠程操作,這樣遠程執行完畢,將結果集傳輸到本地,避免了大結果集的網絡傳輸,從而達到整體優化的效果。使用DRIVING_SITE可以減少總體的網絡傳輸數據量。

當DRIVING_SITE驅動的對象嵌套在視圖中時,可通過DRIVING_SITE(V.T)方式來指定,其中,V表示視圖別名或名稱,T表示視圖里表的別名或名稱。

需要注意的是,對于DML和DDL語句,DRIVING_SITE提示是失效的,會自動被Oracle忽略掉,此時將以目標表所在庫為主計劃驅動,相當于DRIVING_SITE(目標表庫),此時可以通過視圖轉換來達到優化的目的。在DML和DDL中如果是對本地表做DML,主計劃總是在本地執行,會將遠程數據拉到本地,相當于DRIVING_SITE(本地表)。如果是對遠程表做DML,那么主計劃總是在遠程執行,會將本地數據送到遠程,相當于自動DRIVING_SITE(遠程表)。

16.

如何跟蹤tnsping過程?正確答案:sqlnet是oracle提供的與網絡層面交互的一個工具,比如如何解析客戶端發起的連接,如何對客戶端發起的連接進行辨別,如何對客戶端連接進行阻隔限制或者啟用日志及跟蹤(logandtrace)功能等一系列的功能。所以,可以通過sqlnet工具對tnsping進行跟蹤分析,查找為何外部網絡無法連接數據庫的原因。

可以在客戶端的sqlnet.ora文件中配置:

其中,TNSPINGTRACE_LEVEL指的是跟蹤的級別,SUPPORT為最高級別,該參數可選的級別包括off、user、admin和support。一般來說既然是跟蹤錯誤原因,作者建議還是設置為support較好。TNSPrNG.TRACE_DIRECTORY指的是跟蹤產生的trace文件存放的位置。

在執行“tnspingorcl”后,在目錄“D:\app\oracle\product\11.2.0.1\dbhome_1\NETWORK\ADMIN”下會生成一個跟蹤文件稱為tnsping.trc,然后分析該文件即可。

17.

LogMiner是什么?其有哪些用途?請簡述LogMiner的使用過程。正確答案:眾所周知,所有對用戶數據和數據字典的改變都記錄在Oracle的Redo日志中,因此,Redo日志包含了所有進行恢復操作所需要的信息。但是,原始的Redo日志文件無法看懂,所以,Oracle從8i版本以后提供了一個非常有用的分析工具,稱為LogMiner。使用該工具可以輕松獲得Redo日志文件(包含歸檔日志文件)中的具體內容。特別是該工具可以分析出所有對于數據庫的DML操作(INSERT、UPDATE、DELETE等)語句。Oracle9i版本后可以分析DDL語句,另外還可分析得到一些必要的回滾SQL語句。LogMiner一個最重要的用途就是不用全部恢復數據庫就可以恢復數據庫的某個變化。該工具特別適用于調試、審計或者回退某個特定的事務。

LogMiner工具既可以用來分析在線日志,也可以用來分析離線日志文件,既可以分析本身自己數據庫的重作日志文件,也可以用來分析其他數據庫的重做日志文件。當分析其他數據庫的重做日志文件時,需要注意的是,LogMiner必須使用被分析數據庫實例產生的字典文件,而不是安裝LogMiner的數據庫產生的字典文件,另外,必須保證安裝LogMiner數據庫的字符集和被分析數據庫的字符集相同。源數據庫(SourceDatabase)平臺必須和分析數據庫(MiningDatabase)平臺一樣。

Oracle通過LogMiner工具對Redo日志進行挖掘,顯示出一系列可讀的信息,該過程稱為日志挖掘。LogMiner通過V$LOGMNR_CONTENTS視圖顯示Redo日志中的信息。

總的說來,LogMiner工具的主要用途有:①跟蹤數據庫的變化:可以離線地跟蹤數據庫的變化,而不會影響在線系統的性能;②回退數據庫的變化:回退特定的變化數據,減少Point-In-TimeRecovery的執行;③優化和擴容計劃:可通過分析日志文件中的數據以分析數據的增長模式;④確定數據庫的邏輯損壞時間:準確定位操作執行的時間和SCN;⑤確定事務級要執行的精細邏輯恢復操作,可以取得相應的Undo操作;⑥執行后續審計。

(1)安裝LogMiner工具在默認情況下,Oracle已經安裝了LogMiner工具。若是沒有安裝,則可以運行下面兩個腳本:

這兩個腳本必須均以SYS用戶身份運行。其中第一個腳本用來創建DBMS_LOGMNR包,該包用來分析日志文件。第二個腳本用來創建DBMS_LOGMNR_D包,該包用來創建數據字典文件。若要使普通用戶具有日志挖掘的權限,則可以執行如下的SQL進行賦權:

腳本執行完畢后,LogMiner包含兩個PL/SQL包和幾個視圖:

1)DBMS_LOGMNR_D包,包括一個用于提取數據字典信息的過程,即DBMS_LOGMNR_D.BUILD()過程,還包含一個重建LogMiner表的過程,DBMS_LOGMNR_D.SET_TABLESPACE。在默認情況下,LogMiner的表是建在SYSTEM表空間下的。

2)DBMSLOGIMNR包,它有3個存儲過程:

①ADD_LOGFILE(NAMEVARCHAR2,OPTIONSNUMBER)用來添加或刪除用于分析的日志文件。

②START_LOGMNR(START_SCNNUMBER,END_SCNNUMBER,START_TIMENUMBER,END_TIMENUMBER,DICTFILENAMEVARCHAR2,OPTIONSNUMBER)用來開啟日志分析,同時確定分析的時間或SCN窗口以及確認是否使用提取出來的數據字典信息。

③END_LOGMNR()存儲過程用來終止分析會話,它將回收LogMiner所占用的內存。

與LogMiner相關的數據字典視圖:

1)V$LOGHIST:顯示歷史日志文件的一些信息。

2)V$LOGMNR_DICTIONARY:因為LOGMINER可以有多個字典文件,所以該視圖顯示字典文件信息。

3)V$LOGMNR_PARAMETERS:顯示LOGMINER的參數。

4)V$LOGMNR_LOGS:顯示用于分析的日志列表信息。

5)V$LOGMNR_CONTENTS:LOGMINER結果。

(2)LogMiner的數據字典為了完全地轉換Redo日志中的內容,LogMiner需要訪問一個數據庫字典。LogMiner使用該字典將Oracle內部的對象標識符和數據類型轉換為對象名稱和外部的數據格式。沒有字典,LogMiner將使用十六進制字符顯示內部對象ID。

例如,對于如下的SQL語句:

在沒有數據字典的情況下,LogMiner將顯示為:

LogMiner提供了3種提取字典文件的方式:

1)將字典文件提取為一個FlatFile(平面文件或中間接口文件)。

2)將字典文件提取為Redo日志。

3)使用OnlineCatalog(聯機日志)。

下面分別介紹這3種方式:

1)將字典文件提取為一個FlatFile(平面文件或中間接口文件)。為了將數據庫字典信息提取為FlatFile,需要使用帶有STORE_IN_FLAT_FILE參數的DBMS_LOGMNR_D.BUILD程序。DBMS_LOGMNR_月份D.BUILD程序需要訪問一個能夠放置字典文件的目錄。因為PL/SQL程序通常不能直接訪問用戶目錄,必須手動指定一個由DBMS_LOGMNR_D.BUILD程序使用的目錄。為了指定該目錄,必須修改初始化文件中的UTL_FILE_DIR參數:

然后重新啟動數據庫。確保在創建FlatFile文件的過程中,不能有DDL操作被執行。在創建FlatFile文件時,數據庫必須處于OPEN狀態,然后執行DMBS_LOGMNR_D.BUILD程序:

腳本執行完成后會在/home/oracle下生成一個dictionary.ora的文本文件。該文件中包含一系列的建表語句和插入語句。

2)將字典文件提取為Redo日志。為了將字典文件提取為Redo日志,數據庫必須處于OPEN狀態,并且處于歸檔模式。將字典提取為Redo日志的過程中,數據庫系統不能有DDL語句被執行。為了將字典提取為Redo日志,需要使用帶有STORE_IN_REDO_FILES參數的DBMS_LOGMNR_D.BUILD程序:

需要注意的是,將字典文件提取為Redo文件的時候需要開啟附加日志,如下:

在這些Redo日志被歸檔之后,可以通過查詢V$ARCHIVED_LOG視圖來查詢:

如果將字典信息提取為Redo文件,那么在使用DBMD_LOGMNR.ADD_LOGFILE指定所需要分析的日志文件時,需要將這些包含字典信息的Redo文件也添加進去。同時在使用START_LOGMNR開始分析時,需要指定DICT_FROM_REDO_LOGS的參數。

3)使用OnlineCatalog(聯機日志)。為了使LogMiner直接使用數據庫當前使用的字典,在開始LogMiner時可以指定將聯機目錄作為字典源:

使用聯機目錄,意味著不需要再提取字典文件,它是開始分析日志的最快的方式。除了可以分析聯機Redo日志外,還可以在和產生歸檔日志文件相同的系統上分析歸檔日志文件。然而,記住聯機目錄只能重建應用于表的最新版本上的SQL語句。一旦表被修改,聯機目錄就無法反映出表之前的版本。這就意味著LogMiner不能重建執行于表的舊版本上的SQL語句。

(3)跟蹤DDL語句當LogMiner被啟動時,它會自動創建自己的內部字典。如果源字典是FlatFile字典或Redo日志中的字典,則可以使用DDL_DICT_TRACKING參數來跟蹤DDL語句。DDL跟蹤默認是關閉的。為了打開這一功能,可以在啟動LogMiner時使用DDL_DICT_TRACKING參數:

當使用DDL_DICT_TRACKING時,需要注意如下幾點:

1)當使用聯機目錄(Onlinecatalog)時,也就是當使用DICT_FROM_ONLINE_CATALOG參數時,是不能使用DDL_DICT_TRACKING選項的。

2)使用DDL_DICT_TRACKING時,要求數據庫處于OPEN狀態。

3)盡量為LogMiner的表提供一個單獨的表空間。默認情況下LogMiner的表是創建在SYSTEM表空間中的。使用DBMS_LOGMNR_D.SET_TABLESPACE可以在一個單獨的表空間中重建這些LogMiner的表:SQL>EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$');.

(4)過濾LogMiner返回的數據可以使用COMMITTED_DATA_ONLY參數來只顯示那些被提交的事務:

當使用這一參數時,LogMiner將所有的DML操作按照事務的關系組合在一起。這些事務按照它們被提交的順序顯示出來??梢允褂肧KIP_CORRUPTION參數來忽略Redo日志中的所有錯誤:

可以使用STARTTIME和ENDTIME參數按照時間過濾數據,還可以使用STARTSCN和ENDSCN參數按照SCN(SystemChangeNumber)來過濾數據。

(5)典型的LogMiner步驟一個典型的LogMiner的操作包含如下步驟:

1)進行初始化設置:開啟附加日志,設置LogMiner的表空間,設置UTL_FI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論