版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年工程冠梁施工合同樣本
- 2024年國際貿(mào)易與結(jié)算合同
- (2024版)國際物流運(yùn)輸服務(wù)合同
- 2024屯溪區(qū)旅游公益活動(dòng)策劃合同
- 2024年奶牛養(yǎng)殖企業(yè)社會(huì)責(zé)任報(bào)告合同
- 2024年醫(yī)療設(shè)備購買及技術(shù)轉(zhuǎn)讓合同
- 2024學(xué)校小賣部及廚房設(shè)施建設(shè)與運(yùn)營承包合同
- 2024醫(yī)療耗材維修與保養(yǎng)服務(wù)合同
- 農(nóng)業(yè)路水育課程設(shè)計(jì)
- 2024居間服務(wù)保險(xiǎn)代理合同
- 北京市第5屆迎春杯小學(xué)數(shù)學(xué)競(jìng)賽決賽試題doc
- 探究影響滑動(dòng)摩擦力大小的因素實(shí)驗(yàn)說課課件
- 近代科學(xué)革命課件
- 三年級(jí) 上冊(cè)科學(xué) 課件-2.4 哺乳動(dòng)物 |湘教版(一起)(共23張PPT)
- 建設(shè)工程總投資組成表
- 箱變施工方案
- 心系中國夢(mèng)兒童競(jìng)選少先隊(duì)大隊(duì)長PPT飄揚(yáng)紅領(lǐng)巾光榮少先隊(duì)PPT課件(帶內(nèi)容)
- 專題05 家國情懷 中考?xì)v史學(xué)科核心素養(yǎng)專題解讀課件(2022版新課標(biāo))
- 醫(yī)院護(hù)理品管圈成果匯報(bào)縮短腦卒中靜脈溶栓患者DNT完整版本PPT易修改
- 幼兒園教學(xué)課件中班美術(shù)《百變的花瓶》課件
- 液化石油氣充裝操作規(guī)程(YSP118液化石油氣鋼瓶)
評(píng)論
0/150
提交評(píng)論