數(shù)據(jù)庫程序員面試分類真題9_第1頁
數(shù)據(jù)庫程序員面試分類真題9_第2頁
數(shù)據(jù)庫程序員面試分類真題9_第3頁
數(shù)據(jù)庫程序員面試分類真題9_第4頁
數(shù)據(jù)庫程序員面試分類真題9_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫程序員面試分類真題9簡(jiǎn)答題1.

RAC中如何指定JOB的運(yùn)行實(shí)例?正確答案:在RAC中,可以讓JOB在某個(gè)指定的實(shí)例上運(yùn)行。對(duì)于DBMS_JOB和DBMS_SCHEDuLER來說,它們的指定(江南博哥)方法不同:

1)在DBMS_JOB下,執(zhí)行SYS.DBMS_JOB.SUBMIT包創(chuàng)建JOB的時(shí)候,可以指定INSTANCE參數(shù),該參數(shù)指定了JOB運(yùn)行的實(shí)例。

2)DBMS_SCHEDULER下指定實(shí)例運(yùn)行JOB稍微有點(diǎn)復(fù)雜,首先創(chuàng)建SERVICE,再創(chuàng)建JOB_CLASS,最后創(chuàng)建JOB才可以。[考點(diǎn)]JOB

2.

如何判斷SCHEDULERJOB是否正在運(yùn)行?正確答案:可以查詢DBA_SCHEDULER_JOBS視圖的STATE列,若STATE列的值為RUNNING,則代表當(dāng)前的JOB正在運(yùn)行?;蛘咄ㄟ^查詢視圖DBA_SCHEDULER_RUNNING_JOBS,該視圖中的JOB即正在運(yùn)行的JOB。[考點(diǎn)]JOB

3.

如何查詢SCHEDULERJOB的運(yùn)行日志?正確答案:可以通過查詢視圖DBA_SCHEDULER_JOB_RUN_DETAILS來獲取SCHEDULERJOB的運(yùn)行日志、產(chǎn)生的錯(cuò)誤等信息。代碼如下:

SELECTJRD.LOG_ID,JRD.JOB_NAME,N.JOB_CLASS,

TO_CHAR(JRD.LOG_DATE,'YYYY-MM-DDHH24:MI:SS')LOG_DATE,

JRD.STATUS,JRD.ERROR#,JRD.RUN_DURATION運(yùn)行時(shí)長,JRD.ADDITIONAL_INF.O

FROMDBA_SCHEDULER_JOB_LOGN,DBA_SCHEDULER_JOB_RUN_DETAILSJRD

WHEREN.LOG_ID=JRD.LOG_ID

ANDN.JOB_NAME='JOB_INSERT_SQL_LHR'

--JOB的名稱

ORDERBYJRD.LOG_IDDESC;

從查詢結(jié)果中可以看到,JOB_INSERT_SQL_LHR從2016-11-2913:03:36開始執(zhí)行的時(shí)候就報(bào)錯(cuò)了,報(bào)錯(cuò)信息可以從ADDITIONAL_INFO列里找到,其報(bào)錯(cuò)的具體信息如下:

ORA-01658:unabletocreateINITIALextentforsegmentintablespaceTS_LHR

ORA-06512:at"DB_MONITOR.PKG_SQL_HISTORY_LHR",line180

可見,涉及的程序是DB_MONITOR用戶下的PKG_SQL_HISTORY_LHR包,而ORA-01658的錯(cuò)誤是由于表空間不足引起的。[考點(diǎn)]JOB

4.

如何批量刪除JOB?正確答案:可以采用SQL來生成刪除JOB的語句,首先執(zhí)行以下語句,可以根據(jù)情況對(duì)結(jié)果進(jìn)行過濾:

SELECT'EXECDBMS_SCHEDULER.DROP_JOB('''||JOB_NAME||''',TRUB);FROM

USER_SCHEDULER_JOBST1;

將以上SQL生成的結(jié)果復(fù)制到命令窗口就可以批量執(zhí)行了。[考點(diǎn)]JOB

5.

SQL*Plus中@和@@的區(qū)別是什么?正確答案:@和@@都可以調(diào)用腳本,它們的不同之處如下:

@等于start命令,用來運(yùn)行一個(gè)SQL腳本文件。@命令調(diào)用當(dāng)前目錄下的,或指定全路徑,或可以通過SQLPATH環(huán)境變量搜尋到的腳本文件。

@@用在腳本文件中,用來指定“@執(zhí)行的腳本文件”與“@@執(zhí)行的腳本文件”在同一目錄,而不用指定全路徑,也不從SQLPATH環(huán)境變量指定的路徑中尋找文件,該命令一般用在嵌套腳本文件中。[考點(diǎn)]SQL*Plus

6.

SQL*Plus中&與&&的區(qū)別是什么?正確答案:&用來創(chuàng)建一個(gè)臨時(shí)變量,每當(dāng)遇到這個(gè)臨時(shí)變量時(shí),都會(huì)提示輸入一個(gè)值。

&&用來創(chuàng)建一個(gè)持久變量,就像用DEFINE命令或帶NEW_VLAUE子句的COLUMN命令創(chuàng)建的持久變量一樣。當(dāng)使用&&命令引用這個(gè)變量時(shí),不會(huì)每次遇到該變量就提示用戶鍵入值,而只有在第一次遇到時(shí)提示一次。[考點(diǎn)]SQL*Plus

7.

glogin.sql腳本的作用是什么?正確答案:SQL*Plus在啟動(dòng)的時(shí)候會(huì)自動(dòng)查找運(yùn)行兩個(gè)腳本文件:login.sql和glogin.sql。

login.sql文件可以存放SQL*Plus中能使用的任何命令。SQL*Plus在啟動(dòng)時(shí)會(huì)首先查找當(dāng)前目錄下的login.sql文件,其次會(huì)在SQLPATH目錄下查找。如果找到login.sql文件,那么在SQL*Plus顯示“SQL>”前執(zhí)行l(wèi)ogin.sql里的所有內(nèi)容。

glogin.sql是SQL*Plus全局登錄的配置文件,是Oracle自帶的登錄腳本文件,它的路徑是固定的,即$ORACLE_HOME/sqlplus/admin。當(dāng)用戶啟動(dòng)SQL*Plus的時(shí)候,會(huì)從這個(gè)固定的路徑加載glogin.sql。

可以在glogin.sql文件中添加如下的內(nèi)容:

SETSQLPROMPT"_USER'@'_CONNECT_IDENTIFIER>"

這樣,每次登錄SQL*Plus的時(shí)候,SQL提示符就會(huì)變?yōu)樵O(shè)置的內(nèi)容,假設(shè)用戶為SYS,數(shù)據(jù)庫為lhrdb,則提示符如下:

SQL>SHOWSQLPROMPT

sqlprompt"SQL>"

SQL>SETSQLPROMPT"_USER'@'_CONNECT_IDENTIFIER>"

SYS@lhrdb>

SYS@lhrdb>SHOWSQLPROMPT

sqlprompt"_usee'@'_connect_identifier>"

注意,以上提示符的“>”后有一個(gè)空格。[考點(diǎn)]SQL*Plus

8.

SQL*Plus的ERRORLOGGING的作用是什么?正確答案:在Oracle1lg中,可以把SQL或PL/SQL錯(cuò)誤信息自動(dòng)記錄到當(dāng)前用戶下的一個(gè)表中,而且不會(huì)自動(dòng)刪除,默認(rèn)的表名為SPERRORLOG,也可以指定自己的表名替換默認(rèn)表名。[考點(diǎn)]SQL*Plus

9.

如何判斷一個(gè)存儲(chǔ)過程是否正在運(yùn)行?正確答案:有兩種方式可以判斷一個(gè)存儲(chǔ)過程是否正在運(yùn)行,其查詢SQL語句分別如下,若有結(jié)果返回,則說明存儲(chǔ)過程正在運(yùn)行。

方法1:

SELECTA.SID,B.SERIAL#,A.OWNER,A.OBJECT,A.TYPE,B.SERVER,B.MODULE,B.ACTION,B.LOGON_TIME

FROM

V$ACCESS

A,V$SESSIONB

WHEREA.SD=B.SID(+)AND

A.TYPE='PROCEDURE'

AND

B.STATUS='ACTIVE'

AND

A.OBJECT='P_TEST_LHR';

--注意這里修改成存儲(chǔ)過程的名稱

方法2:

SELECT*FROM

V$DB_OBJECT_CACHEWHERETYPE='PROCEDURE'ANDNAME='P_TEST_LHR'ANDLOCKS>0ANDPINS>0;[考點(diǎn)]SQL*Plus

10.

當(dāng)Oracle用戶密碼含特殊字符時(shí),如何登錄?正確答案:當(dāng)Oracle用戶密碼含有特殊字符(例如,&、@、$等)時(shí),SQL*Plus和exp或expdp等工具進(jìn)行登錄的時(shí)候在寫法上有很大的差異。

若密碼不含“&”符號(hào),則可以使用雙引號(hào)將密碼括起來進(jìn)行密碼修改:

alteruserlhridentifiedby"l@hkr/0";

若密碼包含有“&”符號(hào),則需要首先設(shè)置define為off才可以修改密碼:

setdefineoff

alteruserscottidentifiedby"$tiger&1231@h\r/0%s,d$";

alteruserscottidentifiedby"$?'$%*H\@f'\<a-q/$-@#<>'}:H$";

若密碼包含有“"”雙引號(hào),則需要使用password來修改密碼:

passwordscott

在Linux平臺(tái)下,使用不同客戶端連接Oracle數(shù)據(jù)庫的寫法見下表。Linux平臺(tái)SQL*Plus工具exp、imp、expdp、impdp普通用戶無tnssqlplus'lhr/"l@h\r/0'''expdp'lhr/"l@h\r/0'''有tnssqlplus'lhr/"l@h\r/0'''@LHRDBexpdp'lhr/"l@h\r/0'''@LHRDBsys用戶無tnssqlplus/assysdbaexpdp\'/ASSYSDBA\'有tnssqlplus'sys/"l@h\r/0'''@LHRDBassysdbaexpdp\"sys/"l@h\r/0'''@LHRDBassysdba\'正常密碼sqlplussys/lhr@lhrdbassysdbaexpdp\'sys/lhr@LHRDBassysdba\'在上表中,含特殊字符密碼為l@h\r/0,正常密碼為lhr,tns為LHRDB,總的寫法原則:密碼用雙引號(hào)括起來,用戶名和密碼用單引號(hào)括起來,然后【用戶名】+【密碼】+【tns】+【assysdba】用單引號(hào)括起來,最后的這個(gè)單引號(hào)用“\”進(jìn)行轉(zhuǎn)義。在Windows平臺(tái)下,使用不同客戶端連接Oracle數(shù)據(jù)庫的寫法見下表。Windows平臺(tái)SQL*Plus工具exp、imp、expdp、impdp普通用戶無tnssqlpluslhr/"""l@h\r/0"""sqlpluslhr∧"l@h\r/0\"expdplhr/'""'l@h\r/0"""expdplhr∧A"l@h\r/0\"有tnssqlpluslhr/"""l@h\r/0"""@LHRDBsqlpluslhr∧"l@h\r/0\"@LHRDBexpdplhr/'""'l@h\r/0"""@LHRDBexpdplhr∧"l@h\r/0\"@LHRDBsys用戶無tnssqlplus/assysdbaexpdp\"/assysdba\"有tnssqlplussys/"""l@h\r/0"""@LHRDBassysdbasqlplussys∧"l@h\r/0\"@LHRDBassysdba

正常密碼sqlplussys/lhr@lhrdbassysdbaexpdp\"sys/lhr@LHRDBassysdba\"

在上表中,含特殊字符密碼為l@h\r/0,正常密碼為lhr,tns為LHRDB,總的原則:密碼用3個(gè)雙引號(hào)括起來,或者用一個(gè)雙引號(hào)括起來,然后用“\”將雙引號(hào)進(jìn)行轉(zhuǎn)義。

11.

什么是Quote(q)語法?正確答案:在SQL查詢中,會(huì)經(jīng)常需要原樣輸出字符串,如果字符串中含有大量的單引號(hào)、雙引號(hào)或者特殊字符,那么需要用單引號(hào)轉(zhuǎn)義拼接字符串,這樣會(huì)非常麻煩。所以,Oracle提供了一個(gè)Q-quote的表達(dá)式來原樣輸出字符串。

SYS@orclasm>SELECTQ'[I'maboy,mynameis'lhrhaha']'FROMDUAL;

O'[I'MABOY,MYNAMEIS'LHRHAHA']'

------------------------------

I'maboy,mynameis'lhrhaha'

需要注意以下幾點(diǎn):

1)Q-quote定界符可以是除了TAB、空格、回車外的任何單字節(jié)或多字節(jié)字符,包括數(shù)字、字母、特殊字符。但'&'不能作為分隔符,因?yàn)?&'意思是傳入?yún)?shù)。

2)Q'后跟起始分隔符,起始分隔符后的字符串原樣輸出,起始分隔符必須有配對(duì)的結(jié)束分隔符。'['、'('、'{'作為分隔符,必須以']'、')'、'}'結(jié)束。

12.

怎么捕獲用戶登錄信息,如SID、IP地址等?正確答案:可以利用登錄觸發(fā)器。

13.

怎么捕獲整個(gè)數(shù)據(jù)庫的DDL語句或者說捕獲對(duì)象結(jié)構(gòu)變化與修改?正確答案:可以采用DDL觸發(fā)器。

14.

怎么捕獲表上的DML語句?正確答案:可以采用DML觸發(fā)器。

15.

如何從Oracle數(shù)據(jù)庫中獲得毫秒?正確答案:在Oracle9i以上版本,有一個(gè)TIMESTAMP類型可以用來獲得毫秒,如:

SQL>SELECTTO_CHAR(SYSTIMESTAMP,'YYYY-MM-DDHH24:MI:SSXFP)TIME1,TO_CHAR(CURRENT_TIMESTAMP)TIME2FROMDUAL;

TIME1

TIME2

-----------------------------------------

2003-10-2410:48:45.656000

24-OCT-0310.48.45.656000AM+08:00

可以看到,毫秒在TO_CHAR中對(duì)應(yīng)的是FF。

16.

用一個(gè)語句實(shí)現(xiàn)該需求:如果某條記錄存在那么就執(zhí)行更新操作,如果不存在那么就執(zhí)行插入操作。正確答案:可以采用MERGE語句,但是只支持SELECT子查詢。語法為

MERGEINTOTABLEUSINGDATA_SOURCEON(CONDITION)

WHENMATCHEDTHENUPDATE_CLAUSE

WHENNOTMATCHEDTHENINSERT_CLAUSE;

17.

如何實(shí)現(xiàn)分組取前3條記錄?正確答案:可以利用分析函數(shù),如獲取每個(gè)部門薪水前三名的員工或每個(gè)班成績前三名的學(xué)生,代碼如下:

SELECT*FROM(SELECTDEPNO,ENAME,SAL,ROW_NUMBER()OVER(PARTITIONBYDEPNOORDERBYSALDESC)RNFROMEMP)WHERERN<=3;

18.

如何在SQL*Plus環(huán)境中執(zhí)行OS命令?正確答案:可以使用host或!,如下:

SQL>hostlsntctlstart

在Unix/Linux平臺(tái)下:

SQL>!<OScommand>

在Windows平臺(tái)下還可以使用$,如下:

SQL>$<OScommand>

19.

Oracle中有哪些常用的字符函數(shù)?正確答案:常用的有如下幾個(gè)函數(shù):

1)lower(char):將字符串全部轉(zhuǎn)化為小寫的格式。

2)upper(char):將字符串全部轉(zhuǎn)化為大寫的格式。

3)initcap('SQLcourse'):每個(gè)單詞的首字母大寫,其余變?yōu)樾懀Y(jié)果為SqlCourse。

4)concat('Hello','World'):字符串連接,結(jié)果為HelloWorld。

5)length(char):返回字符串的長度。

6)substr(char,m,n):取字符串的子串,m表示起點(diǎn),n代表取n個(gè)字符的意思。

7)replace(char1,search_string,replace_string):替換函數(shù)。

8)instr(char1,char2,[,n[,m]]):取子串在字符串的位置,特別取某一個(gè)特殊字符在原字符串中的位置。

9)trim('

Hello

World

'):前后去掉空格,結(jié)果為“Hello

World”。

10)ltrim('

Hello

World

'):左邊去掉空格,結(jié)果為“Hello

World

”。

11)rtrim('

Hello

World

'):右邊去掉空格,結(jié)果為“Hello

World”。

12)lpad(salary,10,'*'):左補(bǔ)齊,結(jié)果為料*****24000。

13)rpad(salary,10,'*'):右補(bǔ)齊,結(jié)果為24000*****。

14)chr():將ASCII碼轉(zhuǎn)換為字符。

15)ascii():將字符轉(zhuǎn)換為ASCII碼。

20.

如何查看存儲(chǔ)過程的編譯錯(cuò)誤?正確答案:在存儲(chǔ)過程編譯完成后使用SHOWERROR命令即可查看。

21.

如果查詢的列中含有特殊字符,如通配符“%”與“_”,那么該如何查詢這些特殊字符?正確答案:利用ESCAPE來查詢,如下:

SELECT*FROMSCOTT.EMPWHERENAMELIKE'A\%'ESCAPE'\';

22.

如何插入單引號(hào)到數(shù)據(jù)庫表中?正確答案:可以用ASCII碼處理,其他特殊字符如&也一樣,如下:

INSERTINTOTVALUES('I'||CHR(39)||'m');

--CHR(39)代表字符'

或者用兩個(gè)單引號(hào)表示一個(gè):

INSERTINTOTVALUES('I"m');

--兩個(gè)"可以表示一個(gè)'

23.

十進(jìn)制與十六進(jìn)制如何轉(zhuǎn)換?正確答案:十進(jìn)制轉(zhuǎn)換為十六進(jìn)制用TO_CHAR:

SQL>SELECTTO_CHAR(100,'XX')COLAFROMDUAL;

COLA

-----

64

十六進(jìn)制轉(zhuǎn)換為十進(jìn)制用TO_NUMBER:

SQL>SELECTTO_NUMBER('7D',

溫馨提示

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

評(píng)論

0/150

提交評(píng)論