




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫程序員面試分類真題9簡答題1.
RAC中如何指定JOB的運(yùn)行實例?正確答案:在RAC中,可以讓JOB在某個指定的實例上運(yùn)行。對于DBMS_JOB和DBMS_SCHEDuLER來說,它們的指定(江南博哥)方法不同:
1)在DBMS_JOB下,執(zhí)行SYS.DBMS_JOB.SUBMIT包創(chuàng)建JOB的時候,可以指定INSTANCE參數(shù),該參數(shù)指定了JOB運(yùn)行的實例。
2)DBMS_SCHEDULER下指定實例運(yùn)行JOB稍微有點復(fù)雜,首先創(chuàng)建SERVICE,再創(chuàng)建JOB_CLASS,最后創(chuàng)建JOB才可以。[考點]JOB
2.
如何判斷SCHEDULERJOB是否正在運(yùn)行?正確答案:可以查詢DBA_SCHEDULER_JOBS視圖的STATE列,若STATE列的值為RUNNING,則代表當(dāng)前的JOB正在運(yùn)行?;蛘咄ㄟ^查詢視圖DBA_SCHEDULER_RUNNING_JOBS,該視圖中的JOB即正在運(yùn)行的JOB。[考點]JOB
3.
如何查詢SCHEDULERJOB的運(yùn)行日志?正確答案:可以通過查詢視圖DBA_SCHEDULER_JOB_RUN_DETAILS來獲取SCHEDULERJOB的運(yùn)行日志、產(chǎn)生的錯誤等信息。代碼如下:
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)行時長,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í)行的時候就報錯了,報錯信息可以從ADDITIONAL_INFO列里找到,其報錯的具體信息如下:
ORA-01658:unabletocreateINITIALextentforsegmentintablespaceTS_LHR
ORA-06512:at"DB_MONITOR.PKG_SQL_HISTORY_LHR",line180
可見,涉及的程序是DB_MONITOR用戶下的PKG_SQL_HISTORY_LHR包,而ORA-01658的錯誤是由于表空間不足引起的。[考點]JOB
4.
如何批量刪除JOB?正確答案:可以采用SQL來生成刪除JOB的語句,首先執(zhí)行以下語句,可以根據(jù)情況對結(jié)果進(jìn)行過濾:
SELECT'EXECDBMS_SCHEDULER.DROP_JOB('''||JOB_NAME||''',TRUB);FROM
USER_SCHEDULER_JOBST1;
將以上SQL生成的結(jié)果復(fù)制到命令窗口就可以批量執(zhí)行了。[考點]JOB
5.
SQL*Plus中@和@@的區(qū)別是什么?正確答案:@和@@都可以調(diào)用腳本,它們的不同之處如下:
@等于start命令,用來運(yùn)行一個SQL腳本文件。@命令調(diào)用當(dāng)前目錄下的,或指定全路徑,或可以通過SQLPATH環(huán)境變量搜尋到的腳本文件。
@@用在腳本文件中,用來指定“@執(zhí)行的腳本文件”與“@@執(zhí)行的腳本文件”在同一目錄,而不用指定全路徑,也不從SQLPATH環(huán)境變量指定的路徑中尋找文件,該命令一般用在嵌套腳本文件中。[考點]SQL*Plus
6.
SQL*Plus中&與&&的區(qū)別是什么?正確答案:&用來創(chuàng)建一個臨時變量,每當(dāng)遇到這個臨時變量時,都會提示輸入一個值。
&&用來創(chuàng)建一個持久變量,就像用DEFINE命令或帶NEW_VLAUE子句的COLUMN命令創(chuàng)建的持久變量一樣。當(dāng)使用&&命令引用這個變量時,不會每次遇到該變量就提示用戶鍵入值,而只有在第一次遇到時提示一次。[考點]SQL*Plus
7.
glogin.sql腳本的作用是什么?正確答案:SQL*Plus在啟動的時候會自動查找運(yùn)行兩個腳本文件:login.sql和glogin.sql。
login.sql文件可以存放SQL*Plus中能使用的任何命令。SQL*Plus在啟動時會首先查找當(dāng)前目錄下的login.sql文件,其次會在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)用戶啟動SQL*Plus的時候,會從這個固定的路徑加載glogin.sql。
可以在glogin.sql文件中添加如下的內(nèi)容:
SETSQLPROMPT"_USER'@'_CONNECT_IDENTIFIER>"
這樣,每次登錄SQL*Plus的時候,SQL提示符就會變?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>"
注意,以上提示符的“>”后有一個空格。[考點]SQL*Plus
8.
SQL*Plus的ERRORLOGGING的作用是什么?正確答案:在Oracle1lg中,可以把SQL或PL/SQL錯誤信息自動記錄到當(dāng)前用戶下的一個表中,而且不會自動刪除,默認(rèn)的表名為SPERRORLOG,也可以指定自己的表名替換默認(rèn)表名。[考點]SQL*Plus
9.
如何判斷一個存儲過程是否正在運(yùn)行?正確答案:有兩種方式可以判斷一個存儲過程是否正在運(yùn)行,其查詢SQL語句分別如下,若有結(jié)果返回,則說明存儲過程正在運(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';
--注意這里修改成存儲過程的名稱
方法2:
SELECT*FROM
V$DB_OBJECT_CACHEWHERETYPE='PROCEDURE'ANDNAME='P_TEST_LHR'ANDLOCKS>0ANDPINS>0;[考點]SQL*Plus
10.
當(dāng)Oracle用戶密碼含特殊字符時,如何登錄?正確答案:當(dāng)Oracle用戶密碼含有特殊字符(例如,&、@、$等)時,SQL*Plus和exp或expdp等工具進(jìn)行登錄的時候在寫法上有很大的差異。
若密碼不含“&”符號,則可以使用雙引號將密碼括起來進(jìn)行密碼修改:
alteruserlhridentifiedby"l@hkr/0";
若密碼包含有“&”符號,則需要首先設(shè)置define為off才可以修改密碼:
setdefineoff
alteruserscottidentifiedby"$tiger&1231@h\r/0%s,d$";
alteruserscottidentifiedby"$?'$%*H\@f'\<a-q/$-@#<>'}:H$";
若密碼包含有“"”雙引號,則需要使用password來修改密碼:
passwordscott
在Linux平臺下,使用不同客戶端連接Oracle數(shù)據(jù)庫的寫法見下表。Linux平臺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,總的寫法原則:密碼用雙引號括起來,用戶名和密碼用單引號括起來,然后【用戶名】+【密碼】+【tns】+【assysdba】用單引號括起來,最后的這個單引號用“\”進(jìn)行轉(zhuǎn)義。在Windows平臺下,使用不同客戶端連接Oracle數(shù)據(jù)庫的寫法見下表。Windows平臺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個雙引號括起來,或者用一個雙引號括起來,然后用“\”將雙引號進(jìn)行轉(zhuǎn)義。
11.
什么是Quote(q)語法?正確答案:在SQL查詢中,會經(jīng)常需要原樣輸出字符串,如果字符串中含有大量的單引號、雙引號或者特殊字符,那么需要用單引號轉(zhuǎn)義拼接字符串,這樣會非常麻煩。所以,Oracle提供了一個Q-quote的表達(dá)式來原樣輸出字符串。
SYS@orclasm>SELECTQ'[I'maboy,mynameis'lhrhaha']'FROMDUAL;
O'[I'MABOY,MYNAMEIS'LHRHAHA']'
------------------------------
I'maboy,mynameis'lhrhaha'
需要注意以下幾點:
1)Q-quote定界符可以是除了TAB、空格、回車外的任何單字節(jié)或多字節(jié)字符,包括數(shù)字、字母、特殊字符。但'&'不能作為分隔符,因為'&'意思是傳入?yún)?shù)。
2)Q'后跟起始分隔符,起始分隔符后的字符串原樣輸出,起始分隔符必須有配對的結(jié)束分隔符。'['、'('、'{'作為分隔符,必須以']'、')'、'}'結(jié)束。
12.
怎么捕獲用戶登錄信息,如SID、IP地址等?正確答案:可以利用登錄觸發(fā)器。
13.
怎么捕獲整個數(shù)據(jù)庫的DDL語句或者說捕獲對象結(jié)構(gòu)變化與修改?正確答案:可以采用DDL觸發(fā)器。
14.
怎么捕獲表上的DML語句?正確答案:可以采用DML觸發(fā)器。
15.
如何從Oracle數(shù)據(jù)庫中獲得毫秒?正確答案:在Oracle9i以上版本,有一個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中對應(yīng)的是FF。
16.
用一個語句實現(xiàn)該需求:如果某條記錄存在那么就執(zhí)行更新操作,如果不存在那么就執(zhí)行插入操作。正確答案:可以采用MERGE語句,但是只支持SELECT子查詢。語法為
MERGEINTOTABLEUSINGDATA_SOURCEON(CONDITION)
WHENMATCHEDTHENUPDATE_CLAUSE
WHENNOTMATCHEDTHENINSERT_CLAUSE;
17.
如何實現(xiàn)分組取前3條記錄?正確答案:可以利用分析函數(shù),如獲取每個部門薪水前三名的員工或每個班成績前三名的學(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平臺下:
SQL>!<OScommand>
在Windows平臺下還可以使用$,如下:
SQL>$<OScommand>
19.
Oracle中有哪些常用的字符函數(shù)?正確答案:常用的有如下幾個函數(shù):
1)lower(char):將字符串全部轉(zhuǎn)化為小寫的格式。
2)upper(char):將字符串全部轉(zhuǎn)化為大寫的格式。
3)initcap('SQLcourse'):每個單詞的首字母大寫,其余變?yōu)樾?,結(jié)果為SqlCourse。
4)concat('Hello','World'):字符串連接,結(jié)果為HelloWorld。
5)length(char):返回字符串的長度。
6)substr(char,m,n):取字符串的子串,m表示起點,n代表取n個字符的意思。
7)replace(char1,search_string,replace_string):替換函數(shù)。
8)instr(char1,char2,[,n[,m]]):取子串在字符串的位置,特別取某一個特殊字符在原字符串中的位置。
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.
如何查看存儲過程的編譯錯誤?正確答案:在存儲過程編譯完成后使用SHOWERROR命令即可查看。
21.
如果查詢的列中含有特殊字符,如通配符“%”與“_”,那么該如何查詢這些特殊字符?正確答案:利用ESCAPE來查詢,如下:
SELECT*FROMSCOTT.EMPWHERENAMELIKE'A\%'ESCAPE'\';
22.
如何插入單引號到數(shù)據(jù)庫表中?正確答案:可以用ASCII碼處理,其他特殊字符如&也一樣,如下:
INSERTINTOTVALUES('I'||CHR(39)||'m');
--CHR(39)代表字符'
或者用兩個單引號表示一個:
INSERTINTOTVALUES('I"m');
--兩個"可以表示一個'
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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借用鐵路用地合同范本
- 2025年淮安b2考貨運(yùn)資格證要多久
- 別墅電梯銷售合同范本
- 上海退休人員返聘合同范本
- 買賣產(chǎn)品合作合同范本
- 轉(zhuǎn)化單位規(guī)則
- 加盟產(chǎn)品經(jīng)銷合同范本
- 化肥試驗合同范本
- 北京合伙創(chuàng)業(yè)合同范本
- 個人合作股合同范本
- 2023-2024蘇教版小學(xué)數(shù)學(xué)5五年級下冊(全冊)教案設(shè)計
- 批評他人發(fā)言稿(通用12篇)
- DCF-現(xiàn)金流貼現(xiàn)模型-Excel模版(dcf-估值模型)
- 上海實驗學(xué)校幼升小測試題資料
- 一年級美術(shù)課后服務(wù)教案-1
- 重大疾病保險的疾病定義使用規(guī)范(2020年修訂版)-
- RB/T 040-2020病原微生物實驗室生物安全風(fēng)險管理指南
- GB/T 8162-2018結(jié)構(gòu)用無縫鋼管
- 《傲慢與偏見》讀書匯報
- 上海??茖哟巫灾髡猩荚嚵?xí)題集④(含答案)
- 房屋信息查詢情況表((2022年-2023年))
評論
0/150
提交評論