數(shù)據(jù)庫程序員面試分模擬題11_第1頁
數(shù)據(jù)庫程序員面試分模擬題11_第2頁
數(shù)據(jù)庫程序員面試分模擬題11_第3頁
數(shù)據(jù)庫程序員面試分模擬題11_第4頁
數(shù)據(jù)庫程序員面試分模擬題11_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫程序員面試分模擬題11簡答題1.

OS級別刪除了數(shù)據(jù)文件后如何恢復?正確答案:若使用了“ALTERDATABASEDATAFILENOFFLINEDROP;”命令,則并不會刪除數(shù)(江南博哥)據(jù)文件,這個時候可以先ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN;”刪除。如果執(zhí)行“ALTERDATABASEDATAFILENOFFLINEDROP;”后并在OS級別刪除了數(shù)據(jù)文件,那么首先需要使用“ALTERDATABASECREATEDATAFILENAS'/tmp/ts_dd_lhr02.dbf';”來添加一個數(shù)據(jù)文件,然后再執(zhí)行RECOVER并ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN:”命令刪除。如果產生的日志文件已經丟失,那么目標文件就不能再恢復了,這個時候只能刪除表空間了,命令為“DROPTABLESPACEXXXINCLUDINGCONTENTSANDDATAFILES;”。[考點]RMAN

2.

存儲過程和函數(shù)的區(qū)別是什么?正確答案:存儲過程和函數(shù)都是存儲在數(shù)據(jù)庫中的程序,可由用戶直接或間接調用,它們都可以有輸出參數(shù),都是由一系列的SQL語句組成。

具體而言,存儲過程和函數(shù)的不同點如下:

1)標識符不同。函數(shù)的標識符為FUNCTION,存儲過程為PROCEDURE。

2)函數(shù)必須有返回值,且只能返回一個值,而存儲過程可以有多個返回值。

3)存儲過程無返回值類型,不能將結果直接賦值給變量;函數(shù)有返回值類型,在調用函數(shù)時,除了用在SELECT語句中,在其他情況下必須將函數(shù)的返回值賦給一個變量。

4)函數(shù)可以在SELECT語句中直接使用,而存儲過程不能。例如,假設已有函數(shù)FUN_GETAVG()返回NUMBER類型絕對值,那么,SQL語句“SELECTFUN_GETAVG(COL_A)FROMTABLE”是合法的。[考點]存儲過程

3.

在Oracle中,創(chuàng)建視圖的語法形式是怎樣的?正確答案:在Oracle中創(chuàng)建視圖的語法如下:

CREATE[ORREPLACE][FORCE]

VIEW

[SCHEMA.]VIEW_NAME

[(COLUMN1,COLUMN2,...)]AS

SELECT...

[WITHCHECKOPTION][CONSTRAINTCONSTRAINT_NAME]

[WITHREADONLY];[考點]視圖

4.

tkprof的作用是什么?正確答案:tkprof是一個調優(yōu)工具,用于格式化10046事件和SQL_TRACE生成的trace文件。需要注意的是,不能使用tkprof工具來處理10053事件產生的trace文件。在OS命令行中直接輸入tkprof就可以獲得一個完整的參數(shù)列表。tkprof的格式如下:

tkprof

tracefile

outputfile

[options][考點]性能診斷

5.

什么是存儲過程?正確答案:存儲過程是用戶定義的一系列sOL語句的集合,涉及特定表或其他對象的任務,用戶可以調用存儲過程,而函數(shù)通常是數(shù)據(jù)庫已定義的方法,它接收參數(shù)并返回某種類型的值,并且不涉及特定用戶表。

存儲過程用于執(zhí)行特定的操作,可以接收輸入?yún)?shù)、輸出參數(shù),返回單個或多個結果集。在創(chuàng)建存儲過程時,既可以指定輸入?yún)?shù)(IN),也可以指定輸出參數(shù)(OUT),通過在存儲過程中使用輸入?yún)?shù),可以將數(shù)據(jù)傳遞到執(zhí)行部分;通過使用輸出參數(shù),可以將執(zhí)行結果傳遞到應用環(huán)境。存儲過程可以使對數(shù)據(jù)庫的管理、顯示數(shù)據(jù)庫及其用戶信息的工作更加容易。[考點]存儲過程

6.

NoSQL興起的原因有哪些?正確答案:大數(shù)據(jù)技術近幾年發(fā)展十分迅速,在互聯(lián)網(wǎng)公司以及傳統(tǒng)公司都得到了廣泛的應用。傳統(tǒng)的關系數(shù)據(jù)庫在應付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS(SocialNetworkSite,社交網(wǎng))類型的Web2.0純動態(tài)網(wǎng)站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫NoSQL(NotOnlySQL,泛指非關系型的數(shù)據(jù)庫,意即“不僅僅是SQL”)則由于其本身的特點得到了非常迅速的發(fā)展,NoSQL數(shù)據(jù)庫的產生就是為了解決大規(guī)模數(shù)據(jù)集合以及多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應用難題。NoSQL的擁護者們提倡運用非關系型的數(shù)據(jù)存儲,相對于鋪天蓋地的關系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。NoSQL的興起原因主要是隨著Web2.0時代的到來,關系型數(shù)據(jù)庫越來越不能滿足互聯(lián)網(wǎng)應用的需求,從而產生了NoSQL。這些需求包括:①數(shù)據(jù)的高并發(fā)讀寫;②數(shù)據(jù)的高可用性;③海量數(shù)據(jù)存儲;④海量數(shù)據(jù)的實時分析等。[考點]NoSQL

7.

什么是自連接?正確答案:自連接(SelfJoin)是SQL語句中的一種特殊連接方式,使用自連接可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的數(shù)據(jù)。

例如,在SCOTT.EMP中的每一個員工都有自己的MGR(經理),并且每一個經理自身也是公司的員工,自身也有自己的經理。如果需要將每一個員工自己的名字及其經理的名字都查詢出來,SQL語句應該如何寫呢?這個時候就可以用到自連接了。最終SQL如下:

SELECTA.ENAMEWORKER,B.ENAMEMANAGERFROMSCOTT.EMPA,SCOTT.EMPBWHEREA.MGR=B.EMPNOORDERBYA.ENAME;

對于非等值連接,理解起來比較簡單,即表和表之間是通過非等值運算符來連接的,例如,<>、BETWEEN...AND...等,如下:

SELECT

EMP.EMPNO,EMP.ENAME,DEPT.LOCFROMSCOTT.EMPINNERJOINSCOTT.DEPTONEMP.DEPTNO<>DEPT.DEPTNO

WHEREEMPNO=7788ORDERBYEMPNO;

8.

MySQL有哪些命令可以查看鎖?正確答案:有如下幾個命令:

(1)showprocesslist

“showprocesslist;”顯示哪些線程正在運行。如果有SUPER權限,那么就可以看到所有線程。如果有線程在UPDATE或者INSERT某個表,此時進程的status為updating或者sendingdata?!皊howprocesslist;”只列出前100條,如果想全列出,那么可以使用“showfullprocesslist;”。

下面是一些常見的狀態(tài)。狀態(tài)含義Checkingtable正在檢查數(shù)據(jù)表(這是自動的)Closingtables正在將表中修改的數(shù)據(jù)刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,那么就應該確認磁盤空間是否已經滿了或者磁盤是甭正處于重負中Connectout復制從服務器正在連接主服務器Copyingtotmptableondisk由于臨時結果集大于map_table_size,正在將臨時表從內存存儲轉為磁盤存儲,以此節(jié)省內存Creatingtmptable正在創(chuàng)建臨時表以存放部分查詢結果Deletingfrommaintable服務器正在執(zhí)行多表刪除中的第一部分,剛刪除第一個表Deletingfromreferencetables服務器正在執(zhí)行多表刪除中的第二部分,正在刪除其他表的記錄Flushingtables正在執(zhí)行FLUSHTABLES,等待其他線程關閉數(shù)據(jù)表Kilied發(fā)送了一個kill請求給某線程,那么這個線程將會檢查kill標志位,同時會放棄下一個kill請求。MySQL會在每次的主循環(huán)中檢查kill標志位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程被其他線程鎖住了,那么kill請求會在鎖釋放時馬上生效Locked被其他查詢鎖住了Sendingdata正在處理SELECT查詢的記錄,同時正在把結果發(fā)送給客戶端Sortingforgroup正在為GROUPBY做排序Sortingfororder正在為ORDERBY做排序Openingtables這個過程應該會很快,除非受到其他因素的干擾。例如,在執(zhí)行完ALTERTABLE或LOCKTABLE語句以前,數(shù)據(jù)表無法被其他線程打開。正嘗試打開一個表Removingduplicates正在執(zhí)行一個SELECTDISTINCT方式的查詢,但是MySQL無法在前一個階段優(yōu)化掉那些重復的記錄。因此,MySQL需要再次去掉重復的記錄,然后再把結果發(fā)送給客戶端Reopentable獲得了對一個表的鎖,但是必須在表結構修改之后才能獲得這個鎖。已經釋放鎖,關閉數(shù)據(jù)表,正嘗試重新打開數(shù)據(jù)表Repairbysorting修復指令正在排序以創(chuàng)建索引Repairwithkeycache修復指令正在利用索引緩存一個一個地創(chuàng)建新索引。它會比Repairbysorting慢些Searchingrowsforupdate正在將符合條件的記錄找出來以備更新。它必須在UPDATE要修改相關的記錄之前就完成了Sleeping正在等待客戶端發(fā)送新請求Systemlock正在等待取得一個外部的系統(tǒng)鎖。如果當前沒有運行多個mysqld服務器同時請求同一個表,那么可以通過增加--skip-extemal-locking參數(shù)來禁止外部系統(tǒng)鎖UpgradinglockINSERTDELAYED正在嘗試取得一個鎖表以插入新記錄Updating正在搜索匹配的記錄,并且修改它們Userlock正在等待GET_LOCK()Waitingfortables該線程得到通知,數(shù)據(jù)表結構已經被修改了,需要重新打開數(shù)據(jù)表以取得新的結構。然后,為了能重新打開數(shù)據(jù)表,必須等到所有其他線程關閉這個表。以下幾種情況下會產生這個通知:FLUSHTABLEStb1_name,ALTERTABLE,RENAMETABLE,REPAIRTABLE,ANALYZETABLE或OPTIMIZETABLEWaitingforhandlerinsertINSERTDELAYED已經處理完了所有待處理的插入操作,正在等待新的請求

(2)showopentables

這條命令能夠查看當前有哪些表是打開的。in_use列表示有多少線程正在使用某張表,name_locked表示表名是否被鎖,這一般發(fā)生在DROP或RENAME命令操作這張表時。所以這條命令不能查詢到當前某張表是否有死鎖,誰擁有表上的這個鎖等。常用命令如下:

showopentablefromdb_name;

showopentableswherein_use>0;

(3)showengineinnodbstatus\G;

這條命令查詢innodb引擎的運行時信息。

(4)查看服務器的狀態(tài)

showstatuslike'%lock%';

(5)查詢INFORMATION_SCHEMA用戶下的表

通過INFORMATION_SHCEMA下的INNODB_LOCKS、INNODB_LOCK_WAITS和INNODB_TRX這三張表可以更新監(jiān)控當前事務并且分析存在的鎖問題。

查看當前狀態(tài)產生的innodb鎖,僅在有鎖等待時有結果輸出:

SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;

查看當前狀態(tài)產生的innodb鎖等待,僅在有鎖等待時有結果輸出:

SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCK_WAITS;

當前innodb內核中的活躍(ACTIVE)事務:

SELECT*FROMINFORMATION_SCHEMA.INNODB_TRX;[考點]鎖

9.

會話游標有哪些屬性?正確答案:會話游標有4個屬性,見下表。屬性類型簡介適用對象適用SQLSQL%FOUND布爾型最近的FETCH是否提取到數(shù)據(jù),表示一條SQL語句被執(zhí)行成功后受其影響而改變的記錄數(shù)是否大于或等于1,若是則賦值為TRUE,否則為FALSE。在一條DML語句被執(zhí)行前,SQL%FOUND的值是NULL隱式游標、顯式游標INSERT、DELETE、UPDATE、SELECT...INTO...SQL%NOTFOUND布爾型最近的FETCH是否沒有提取到數(shù)據(jù),表示一條SQL語句被執(zhí)行成功后受其影響而改變的記錄數(shù)是否為0,若是則賦值為TRUE,否則為FALSE。在一條DML語句被執(zhí)行前,SQL%NOTFOUND的值是NULL隱式游標、顯式游標SQL%ROWCOUNT數(shù)值型表示最近的一條SQL語句成功執(zhí)行后受其影響而改變的記錄的數(shù)最,后續(xù)執(zhí)行的SQL會覆蓋SQL%ROWCOUNT的值隱式游標、顯式游標SQL%ISOPEN布爾型游標是否打開,當游標打開時返回TRUE。對于隱式游標而言,SQL%ISOPEN的值永遠是FALSE顯式游標

當執(zhí)行一條DML語句后,DML語句的結果保存在這4個游標屬性中,這些屬性用于控制程序流程或者了解程序的狀態(tài)。當運行DML語句時,PL/SQL打開一個內建游標并處理結果。在這些屬性中,SQL%FOUND和SOL%NOTFOUND是布爾值,SQL%ROWCOUNT是整數(shù)值。需要注意的是,若游標屬于隱式游標,則在PL/SOL中可以直接使用上表中的屬性;若游標屬于顯式游標,則上表中的屬性里“SQL%”需要替換為自定義顯式游標的名稱。上表中的這4個屬性對于動態(tài)游標依然適用。[考點]游標

10.

什么是數(shù)據(jù)庫系統(tǒng)的型和值?正確答案:型(Type)是指一類數(shù)據(jù)的結構和屬性的說明,值(Value)是型的一個具體賦值。例如:

記錄型:(學號,姓名)

記錄值:(08450226,李多多)[考點]數(shù)據(jù)庫系統(tǒng)的組成與結構

11.

如何生成日期格式的文件?正確答案:在Linux/Unix上,使用“'date+%y%m%d'或$(date+%y%m%d)”,如:

touchexp_table_name_'date+%y%m%d'.dmp

DATE=$(date+%y%m%d)

或者:

DATE=$(date+%Y%m%d--date'1daysago')#獲取昨天或多天前的日期

在Windows上,使用“%date:~4,10%”,其中4是開始字符,10是提取長度,表示從date生成的日期中,提取從4開始、長度是10的串。如果想得到更精確的時間,那么在Windows上面還可以使用time。[考點]SHELL腳本系列

12.

E-R圖向關系模型的轉換一般遵循哪些原則?正確答案:E-R圖向關系模型的轉換一般遵循如下原則:

1)一個實體型轉換為一個關系模式。實體的屬性就是關系的屬性。實體的碼就是關系的碼。

例如,學生實體可以轉換為如下關系模式,其中,學號為學生關系的碼:

學生(學號,姓名,出生日期,所在系,年級,平均成績)。同樣,性別、宿舍、班級、檔案材料、教師、課程、教室、教科書都分別轉換為一個關系模式。

2)一個聯(lián)系轉化為一個關系模式,與該聯(lián)系相連的各實體的碼以及聯(lián)系的屬性轉化為關系的屬性。該關系的碼有如下3種情況:

①若聯(lián)系為1:1,則每個實體的碼均是該關系的候選碼。

②若聯(lián)系為1:n,則關系的碼為n端實體的碼。

③若聯(lián)系為m:n,則關系的碼為諸實體碼的組合。

下面分別來講解這3種情況。

①聯(lián)系為1:1

一個1:1聯(lián)系可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合并。

a)如果轉換為一個獨立的關系模式,那么與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性,每個實體的碼均是該關系的候選碼。

b)如果與某一端對應的關系模式合并,那么需要在該關系模式的屬性中加入另一個關系模式的碼和聯(lián)系本身的屬性。

②聯(lián)系為1:n

一個1:n聯(lián)系可以轉換為一個獨立的關系模式,也可以與n端對應的關系模式合并。

a)如果轉換為一個獨立的關系模式,那么與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性,而關系的碼為n端實體的碼。

b)如果與n端對應的關系模式合并,那么在n端實體對應模式中加入1端實體所對應關系模式的碼,以及聯(lián)系本身的屬性。而關系的碼為n端實體的碼。

③聯(lián)系為m:n

一個m:n聯(lián)系轉換為一個關系模式。與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性均轉換為關系的屬性,而關系的碼為各實體碼的組合。

3)同一實體集的實體間的聯(lián)系,即自聯(lián)系,也可按上述1:1、1:n和m:n三種情況分別處理。

例如,如果教師實體集內部存在領導與被領導的1:n自聯(lián)系,那么可以將該聯(lián)系與教師實體合并,這時主鍵職工號將多次出現(xiàn),但作用不同,可用不同的屬性名加以區(qū)分。例如,在合并后的關系模式中,主鍵仍為職工號,再增設一個“系主任”屬性,存放相應系主任的職工號。

4)具有相同碼的關系模式可合并。

為了減少系統(tǒng)中的關系個數(shù),如果兩個關系模式具有相同的主鍵,那么可以考慮將它們合并為一個關系模式。合并方法是將其中一個關系模式的全部屬性加入另一個關系模式中,然后去掉其中的同義屬性(可能同名也可能不同名),并適當調整屬性的次序。[考點]E-R模型

13.

MySQL和Oracle如何修改命令提示符?正確答案:MySQL的默認提示符為“mysql”,可以使用prompt命令來修改,如下:

全局:exportMYSQL_PS1="(\u@\h)[\d]>"

蘭前會話:prompt(\u@\h)[\d]\R:\m:\s>\_

其中,“\u”代表用戶名,“\h”代表服務器地址,“\d”代表當前數(shù)據(jù)庫,“\R:\m:\s”代表時分秒,例如,23:10:10。

Oracle的默認命令提示符為“SQL”,可以使用“SETSQLPROMPT”命令來修改,如下:

SQL>SHOWSQLPROMPT

sqlprompt"SQL>"

SQL>SETSQLPROMPT"_USEW'@'_CONNECT_IDENTIFIER>"

SYS@lhrdb>

SYS@lhrdb>SHOWSQLPROMPT

sqlprompt"_user'@'_connect_identifier>"

在以上結果中,SYS表示用戶,lhrdb表示數(shù)據(jù)庫。注意,以上提示符的“>”后有一個空格。

如果想全局生效,那么可以修改文件:$ORACLE_HOME/sqlplus/admin/glogin.sql。在glogin.sql文件中添加如下的內容:

SETSQLPROMPT"_USER'@'_CONNECT_IDENTIFIER>"

這樣,每次登錄SQL*Plus的時候,SQL提示符就會變?yōu)樵O置的內容。

14.

如何查詢表和索引的歷史統(tǒng)計信息?正確答案:從Oracle10g開始,當收集表的統(tǒng)計信息的時候,舊的統(tǒng)計數(shù)據(jù)被保留,如果因為新的統(tǒng)計信息而出現(xiàn)性能問題,舊的統(tǒng)計信息就可以被恢復。歷史統(tǒng)計信息保存在以下幾張表中:

1)WRI$_OPTSTAT_TAB_HISTORY表的統(tǒng)計信息。

2)WRI$_OPTSTAT_IND_HISTORY索引的統(tǒng)計信息。

3)WRI$_OPTSTAT_HISTHEAD_HISTORY列的統(tǒng)計信息。

4)WRI$_OPTSTAT_HISTGRM_HISTORY直方圖的信息。

從視圖DBA_TAB_STATS_HISTORY可以查詢歷史收集統(tǒng)計信息的時間,但是不能查詢到行數(shù),所以需要結合基表來查詢,查詢的SQL語句如下:

SELECTB.OWNER,B,OBJECT_NAMETABLE_NAME,TO_CHAR(D.ANALYZETIME,'YYYY-MM-DDHH24:MI:SS')LAST_ANALYZETIME,

TO_CHAR(D.SAVTIME,'YYYY-MM-DDHH24:MI:SS')CURR_ANALYZETIME,D.ROWCNT

FROMSYS.WRI$_OPTSTAT_TAB_HISTORYD,DBA_OBJECTSB

WHERE

D.OBJ#=B.OBJECT_IDANDB.OBJECTNAMEIN('TEST_STAT','TPCCBOKBAL_TMP','TPCCBOKBALJN','PK_TPCCBOKBAL')

ORDERBYD.OBJ#,D.SAVTIME;

查詢索引的歷史統(tǒng)計信息的SQL語句如下:

SELECTB.OWNER,B.OBJECT_NAMEINDEX_NAME,TO_CHAR(D.ANALYZETIME,'YYYY-MM-DDHH24:MI:SS')LAST_ANALYZEIIME,

TO_CHAR(D.SAVTIME,'YYYY-MM-DDHH24:MI:SS')CURR_ANALYZETIME,D.ROWCNT,D.BLEVEL,D.LEAFCNT,D.DISTKEY,D.CLUFAC

FROMSYS.WRIS_OPTSTAT_IND_HISTORYD,DBA_OBJECTSB

WHERED.OBJ#=B.OBJECT_IDANDB.OBJECT_NAMEIN('IND_TEST)

ORDERBYD.OBJ#,D.SAVTIME;

默認情況下統(tǒng)計信息將被保留31天,可以使用下面的命令修改:

EXECUTEDBMS_STATS.ALTER_STATSHISTORY_RETENTION(XX);

--xx是保留的天數(shù)

注意:這些統(tǒng)計信息在SYSAUX表空間中占有額外的存儲開銷,所以應該注意并防止統(tǒng)計信息將表空間填滿。

SELECTDBMS_STATS.GET_STATS_HISTORY_RETENTIONFROMDUAL;--查詢統(tǒng)計信息當前保留的天數(shù)。[考點]統(tǒng)計信息

15.

哪個命令可以查看所有數(shù)據(jù)庫?正確答案:運行命令:showdatabases;。[考點]連接數(shù)據(jù)庫

16.

視圖的作用有哪些?正確答案:同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時動態(tài)生成。對其中所引用的基礎表而言,視圖的作用類似于篩選。定義視圖可以來自當前或其他數(shù)據(jù)庫的一個或多個表,或者其他視圖。分布式查詢也可用于定義使用多個異類源數(shù)據(jù)的視圖。如果有幾臺不同的服務器分別存儲不同地區(qū)的數(shù)據(jù),那么當需要將這些服務器上相似結構的數(shù)據(jù)組合起來的時候,這種方式就非常有用。

數(shù)據(jù)庫視圖的作用有以下幾點:

1)隱藏了數(shù)據(jù)的復雜性,可以作為外模式,提供了一定程度的邏輯獨立性。

2)有利于控制用戶對表中某些列或某些機密數(shù)據(jù)的訪問,提高了數(shù)據(jù)的安全性。

3)能夠簡化結構,執(zhí)行復雜查詢操作。

4)使用戶能以多種角度、更靈活地觀察和共享同一數(shù)據(jù)。[考點]視圖

17.

數(shù)據(jù)獨立性包括哪幾個方面?正確答案:數(shù)據(jù)獨立性包括物理獨立性和邏輯獨立性兩個方面。物理獨立性是指用戶的應用程序與存儲在磁盤上的數(shù)據(jù)庫中的數(shù)據(jù)是相互獨立的;邏輯獨立性是指用戶的應用程序與數(shù)據(jù)庫的邏輯結構是相互獨立的。[考點]數(shù)據(jù)庫安全

18.

如何捕獲存儲過程中出現(xiàn)異常的行號?正確答案:使用函數(shù)DBMS_UTILITY.FORMAT_ERROR_BACKTRACE可以獲取到出現(xiàn)異常時候的程序的行號,而函數(shù)DBMS_UTILITY.FORMAT_ERROR_STACK可以獲取到出現(xiàn)異常時的錯誤信息,作用和SQLERRM一樣。[考點]程序處理

19.

什么是ORA-01555?正確答案:在告警日志中記錄的ORA-01555(snapshottooold,快照過舊)報錯信息類似:

ORA-01555:snapshottooold:rollbacksegmentnumber107withname"_SYSSMU107_1253191395$"toosmall

默認情況,ORA-01555錯誤發(fā)生時不會自動生成跟蹤日志文件,但是可以在系統(tǒng)里設置下面的事件,讓它在錯誤發(fā)生的同時生成跟蹤日志文件:

altersystemsetevents'1555tracenameerrorstacklevel3';

由于回滾段是循環(huán)使用的,當事務提交以后,該事務占用的回滾段事務會被標記為非活動,此時的回滾段空間可以被覆蓋重用。那么問題就出現(xiàn)了,如果一個查詢需要使用被覆蓋的回滾段構造前鏡像(BeforeImage)實現(xiàn)一致性讀,那么此時就會出現(xiàn)Oracle著名的ORA-01555(snapshottooold,快照過舊)錯誤。需要注意的是,ORA-01555錯誤是一個安全的錯誤,它不會造成數(shù)據(jù)丟失或者損壞,只是會讓收到該錯誤的查詢無法繼續(xù)。

ORA-01555錯誤的另外一個原因是延遲塊清除(DelayedBlockCleanout)。當一個查詢觸發(fā)延遲塊清除時,Oracle需要去查詢回滾段獲得該事務的提交SCN。如果事務的前鏡像信息已經被覆蓋,并且查詢SCN也小于回滾段中記錄的最小提交SCN,那么Oracle將無從判斷查詢SCN和事務提交SCN的大小,此時出現(xiàn)延遲塊清除會導致ORA-01555錯誤。

還有一種導致ORA-01555錯誤的情況出現(xiàn)在使用SQL*Loader直接方式加載(direct=true)數(shù)據(jù)時,由于不產生Redo和Undo信息,Oracle直接指定CACHEDCOMMITSCN進行加載數(shù)據(jù),在訪問這些數(shù)據(jù)時,有時會產生ORA-01555錯誤。

知道了ORA-01555錯誤產生的原因就可以總結出以下方法來解決ORA-01555錯誤問題:

1)擴大回滾段。因為回滾段是循環(huán)使用的,如果回滾段足夠大,那么被提交的數(shù)據(jù)信息就能保存足夠長的時間,而那些大事務就可以完成一致性讀取。

2)增加UNDO_RETENTION時間。在UNDO_RETENTION規(guī)定的時間內,任何其他事務都不能覆蓋這些數(shù)據(jù)。

3)優(yōu)化相關查詢語句,減少一致性讀。減少查詢語句的一致性讀,也可以降低讀取不到回滾段數(shù)據(jù)的風險。

4)減少不必要的事務提交。提交的事務越少,產生的回滾段信息就越少。

5)對大事務指定回滾段。通過以下語句可以指定事務的回滾段:

SETTRANSACTIONUSEROLLBACKSEGMENTorllback_segment;

給大事務指定回滾段,即降低大事務回滾信息覆蓋其他事務的回滾信息的概率,又降低了它自身的回滾信息被覆蓋的概率。大事務的存在,往往是ORA-01555錯誤產生的誘因。

6)使用游標時盡量使用顯式游標,并且只在需要的時候打開游標,同時將所有可以在游標外做的操作從游標循環(huán)中拿出。當游標打開時,查詢就開始了,直到游標關閉。減少游標的打開時間,就減少了ORA-01555錯誤發(fā)生的概率。

7)使用回滾表空間自動管理?;貪L表空間自動管理是Oracle9i后的特性,Oracle自動管理回滾段的創(chuàng)建和回收,并且Oracle1

溫馨提示

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

評論

0/150

提交評論