版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)庫程序員面試分類真題10簡答題1.
PL/SQL中的%ROWTYPE和%TYPE的區(qū)別是什么?正確答案:%TYPE是定義一個變量,其數(shù)據(jù)類型與已經(jīng)定義的某個數(shù)據(jù)變量的類型相同,或者與數(shù)據(jù)庫表的(江南博哥)某個列的數(shù)據(jù)類型相同。[解析]關于%ROWTYPE,需要了解以下內(nèi)容:
1)%ROWTYPE返回的是一個記錄類型,其數(shù)據(jù)類型和數(shù)據(jù)庫表的數(shù)據(jù)結構一致。
2)聲明的變量對應于數(shù)據(jù)庫表或視圖中列的集合。
3)在%ROWTYPE之前加上數(shù)據(jù)庫表名。
4)記錄內(nèi)字段名和數(shù)據(jù)類型與參照表或視圖中的列相同。
具體而言,%ROWTYPE有如下優(yōu)點:
1)可以不必知道數(shù)據(jù)庫中列的數(shù)量和類型。
2)在運行期間,數(shù)據(jù)庫中列的數(shù)量和類型可能發(fā)生變化,但是卻不用修改代碼。
3)在SELECT語句中使用該屬性可以有效地檢索表中的行。
2.
使用哪個數(shù)據(jù)字典可以查詢序列的定義信息?正確答案:可以通過查詢數(shù)據(jù)字典視圖DBA_SEQUENCES獲取序列的定義信息,NEXTVAL返回序列中下一個有效的值,任何用戶都可以引用CURRVAL中存放的序列的當前值。當序列值不符合實際需求時,可以執(zhí)行ALTERSEQUENCE命令修改序列,需要注意的是,啟動序列號不可以修改(STARTWITHN)。修改序列的語法和序列的創(chuàng)建語法一樣,只是將CREATE修改為ALTER即可。
3.
同義詞的定義及其作用是什么?正確答案:同義詞是其他對象(例如表、實體、存儲過程、函數(shù)、包、序列)的別名。同義詞也可以是
另一個同義詞的別名。同義詞的優(yōu)點主要體現(xiàn)在以下幾個方面:
1)當使用對象時,不需要指出對象的所有者。
2)引用對象不需要指出它所在的數(shù)據(jù)庫。
創(chuàng)建同義詞必須要有CREATEANYSYNONYM、CREATESYNONYM系統(tǒng)權限。要創(chuàng)建全局的同義詞,必須有CREATEPUBLICSYNONYN系統(tǒng)權限。創(chuàng)建同義詞的語法如下:
CREATEORREPLACE[PUBLIC]SYNONYM同義詞名稱FOR用戶名,表名稱;
4.
當DML語句中有一條數(shù)據(jù)報錯時,如何讓該DML語句繼續(xù)執(zhí)行?正確答案:當一個DML語句運行的時候,如果遇到了錯誤,那么這條語句會進行回滾,就好像沒有執(zhí)行過。對于一個大的DML語句而言,如果個別數(shù)據(jù)錯誤而導致整個語句的回滾,那么會浪費很多的資源和運行時間。所以,從Oracle10g開始Oracle支持記錄DML語句的錯誤,而允許語句自動繼續(xù)執(zhí)行。這個功能可以使用DBMSERRLOG包實現(xiàn)。
利用CREATEERRORLOG來創(chuàng)建T1表的DML錯誤記錄表:
可以看到,插入成功執(zhí)行,但是插入記錄為0條。對應的錯誤信息表中已經(jīng)包含了插入的信息。而且從錯誤信息表中還可以看到對應的錯誤號和詳細錯誤信息,ORA_ERR_OPTYP$為錯誤操作類型,I表示為INSERT。
關于LOGERRORS的語法為,INTO語句后面跟隨的就是指定的錯誤記錄表的表名。在INTO語句后面,可以跟隨一個表達式“('T1_ERRLOG_LHR')”即ORA_ERR_TAG$中存儲的信息,用來設置本次語句執(zhí)行的錯誤在錯誤記錄表中對應的TAG。有了這個語句,就可以很輕易地在錯誤記錄表中找到某次操作所對應的所有的錯誤,這對于錯誤記錄表中包含了大量數(shù)據(jù),且本次語句產(chǎn)生了多條錯誤信息的情況十分有幫助。只要這個表達式的值可以轉(zhuǎn)化為字符串類型就可以。REJECTLIMIT則限制語句出錯的數(shù)量。
LHR@orclasm>INSERTINTOT1SELECT*FROMT2LOGERRORSINTOT1_ERRLOG('T1_ERRLOG')REJECTLIMIT1;
INSERTINTOT1SELECT*FROMT2LOGERRORSINTOT1_ERRLOG('T1_ERRLOG')REJECTLIMIT1
*
ERRORatline1:
ORA-00001:uniqueconstraint(LHR.PK_T1_A)violated
可以看到,當設置的REJECTLIMIT的值小于出錯記錄數(shù)時,語句會報錯,這時LOGERRORS語句沒有起到應有的作用,插入語句仍然以報錯結束。而如果將REJECTLIMIT的限制設置大于等于出錯的記錄數(shù),則插入語句就會執(zhí)行成功,而所有出錯的信息都會存儲到LOGERRORS對應的表中。只要指定了LOGERRORS語句,不管最終插入語句是否成功地執(zhí)行完成,在錯誤記錄表中都會記錄語句執(zhí)行過程中遇到的錯誤。比如第一個插入由于出錯數(shù)目超過REJECTLIMIT的限制,這時在記錄表中會存在REJECTLIMIT+1條記錄數(shù),因此這條記錄錯誤導致了整個SQL語句的報錯。如果不管碰到多少錯誤,都希望語句能繼續(xù)執(zhí)行,那么可以設置REJECTLIMIT為UNLIMITED。需要注意的是,即使做了回滾操作,錯誤日志表中的記錄并不會減少,因為Oracle是利用自治事務的方式插入錯誤記錄表的。
LOGERRORS可以用在INSERT、UPDATE、DELETE和MERGE后,但是,它有以下限制條件:
1)違反延遲約束。
2)直接路徑的INSERT或MERGE語句違反了唯一約束或唯一索引(注意:從Oracle11g開始,已經(jīng)取消了該條限制)。
3)更新操作違反了唯一約束或唯一索引。
4)錯誤日志表的列不支持的數(shù)據(jù)類型包括LONG、LONGRAW、BLOG、CLOB、NCLOB、BFILE以及各種對象類型。Oracle不支持這些類型的原因也很簡單,這些特殊的類型不是包含了大量的記錄,就是需要通過特殊的方法來讀取,因此Oracle沒有辦法在SQL處理的時候?qū)械男畔懙藉e誤記錄表中。
5.
什么是臨時表?正確答案:在創(chuàng)建數(shù)據(jù)表的時候,如果沒有特殊的指明,那么創(chuàng)建的表是一個永久的關系型表,也就是說,這個表中對應的數(shù)據(jù),除非是顯式地刪除,否則表中的數(shù)據(jù)是永遠都存在的。相對應的,在Oracle數(shù)據(jù)庫中,還有一種類型的表,叫作臨時表。這個臨時表與永久表最大的區(qū)別就是表中的數(shù)據(jù)不會永遠地存在。當一個會話結束或者事務結束的時候,這個臨時表中的數(shù)據(jù),不用用戶自己刪除,數(shù)據(jù)庫自己會自動清除。
Oracle的臨時表創(chuàng)建之后基本不占用表空間,如果沒有指定臨時表(包括臨時表的索引)存放的表空間,那么插入臨時表的數(shù)據(jù)是存放在Oracle系統(tǒng)的默認臨時表空間中(TEMP),一個系統(tǒng)可能有多個臨時表空間。臨時表的數(shù)據(jù)只能存放在臨時表空間中。
臨時表的數(shù)據(jù)只是在事務期間存在,對于會話類型的臨時表,數(shù)據(jù)在會話期間存在,會話的數(shù)據(jù)對于當前會話私有,每個會話只能看到并修改自己的數(shù)據(jù)。DML鎖不會加到臨時表的數(shù)據(jù)上??梢詫εR時表創(chuàng)建索引、視圖、觸發(fā)器,可以用exp和imp工具導入導出表的定義,但是不能導出數(shù)據(jù)。[考點]對象
6.
臨時表的特點有哪些?正確答案:臨時表的特點有如下幾點:
1)多用戶操作的獨立性。對于使用同一張臨時表的不同用戶,Oracle都會分配一個獨立的TEMPSEGMENT,這樣避免了多個用戶在對同一張臨時表操作時發(fā)生交叉,從而保證了多個用戶操作的并發(fā)性和獨立性。
2)數(shù)據(jù)的臨時性。既然是臨時表,顧名思義,存放在該表中的數(shù)據(jù)是臨時性的。Oracle根據(jù)創(chuàng)建臨時表時指定的參數(shù)(ONCOMMITDELETEROWS/ONCOMMITPRESERVEROWS),自動將數(shù)據(jù)TRUNCATE掉。[考點]對象
7.
Oracle有哪幾種臨時表?正確答案:Oracle數(shù)據(jù)庫根據(jù)臨時表的性質(zhì)不同,可以分為事務臨時表(ONCOMMITDELETEROWS)與會話臨時表(ONCOMMITPRESERVEROWS)。
事務臨時表是指數(shù)據(jù)只在當前事務內(nèi)有效,該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的數(shù)據(jù)將自動被清空,其他的內(nèi)容和會話級的臨時表的一致(包括退出SESSION的時候,事務級的臨時表的數(shù)據(jù)也會被清空)。一般情況下,如果在創(chuàng)建數(shù)據(jù)表的時候,沒有特殊指咀表是會話臨時表,那么該表默認為事務臨時表。事務臨時表中的數(shù)據(jù)被清空的情況包括提交事務(COMMIT)、回滾事務(ROLLBACK)以及退出SESSION。
會話臨時表,顧名思義,是指數(shù)據(jù)只在當前會話內(nèi)是有效的臨時表。關閉當前會話或者進行新的連接之后,數(shù)據(jù)表中的內(nèi)容就會被清除。
會話臨時表與事務臨時表主要的差異就在于刪除數(shù)據(jù)的時機不同。事務臨時表是在事務提交或回滾的時候清除數(shù)據(jù),而會話臨時表則是在關閉當前會話的時候清除數(shù)據(jù)。只要當前會話沒有關閉,即使事務完成了,會話臨時表中的數(shù)據(jù)仍然存在,不會被清除。[考點]對象
8.
如何判斷某張表是否是臨時表?正確答案:查看一張表是否臨時表,可以從DBA_TABLES視圖的DURATION列來查詢:
[考點]對象
9.
默認情況下,Oracle是否會收集臨時表的統(tǒng)計信息?正確答案:臨時表默認是不收集統(tǒng)計信息的,但是可以使用DBMS_STATS.GATHER_SCHEMA_STATS在SCHEMA級別收集,需要設置GATHER_TEMP為TRUE(默認為FALSE);也可以和普通表一樣使用GATHER_TABLE_STATS在表級別來收集。需要注意的是,只能收集會話臨時表的統(tǒng)計信息,不能收集事務臨時表的統(tǒng)計信息。會話臨時表的統(tǒng)計信息是被所有的會話所共享的,所以,在一般情況下,不建議收集臨時表的統(tǒng)計信息,否則可能會導致很嚴重的數(shù)據(jù)庫性能問題。臨時表的統(tǒng)計信息在生成執(zhí)行計劃時一般是被動態(tài)采樣的。[考點]對象
10.
什么是OracleDirectory?正確答案:OracleDirectory可以讓用戶在Oracle數(shù)據(jù)庫中靈活地對文件進行讀寫操作,極大地提高了Oracle的易用性和可擴展性。[考點]對象
11.
Oracle的DBLINK是什么?正確答案:當用戶要跨本地數(shù)據(jù)庫訪問另外一個數(shù)據(jù)庫表中的數(shù)據(jù)時,本地數(shù)據(jù)庫中必須創(chuàng)建了遠程數(shù)據(jù)庫的DBLINK,通過DBLINK可以像訪問本地數(shù)據(jù)庫一樣訪問遠程數(shù)據(jù)庫表中的數(shù)據(jù)。其實,DBLINK和數(shù)據(jù)庫中的VIEW差不多,創(chuàng)建DBLINK的時候需要知道待讀取數(shù)據(jù)庫的IP地址、ORACLE_SID以及數(shù)據(jù)庫用戶名和密碼。
在創(chuàng)建DBLINK之前,普通用戶必須具有相關的權限才能創(chuàng)建DBLINK,以SYS用戶登錄到本地數(shù)據(jù)庫可以看到相關的權限:
SELECT*FROMUSER_SYS_PRIVSTWHERET.PRIVILEGELIKEUPPER('%LINK%');
可以看出,在數(shù)據(jù)庫中DBLINK有3種權限:CREATEDATABASELINK(所創(chuàng)建的DBLINK只能是創(chuàng)建者自己使用,其他用戶不能使用)、CREATEPUBLICDATABASELINK(PUBLIC表示所創(chuàng)建的DBLINK所有用戶都可以使用)與DROPPUBLICDATABAsELINK(刪除公共的DBLINK)??梢允褂萌缦率跈嗾Z句給用戶SCOTT授予CREATEPUBLICDATABASELINK和DROPPUBLICDATABASELINK兩個權限:
GRANTCREATEPUBLICDATABASELINK,DROPPUBLICDATABASELINKTOSCOTT;
查詢數(shù)據(jù)庫的DBLINK可以使用SQL語句:SELECT*FROMDBA_DB_LINKS。[考點]對象
12.
Oracle的表可以分為哪幾類?正確答案:從理論上來講,不存在一種能夠滿足所有讀取要求的數(shù)據(jù)存儲方式,所以,Oracle設計了大約5種數(shù)據(jù)的存儲格式,詳見下表。
從上表中可以看出,沒有最好的技術,只有最合適的技術。[考點]對象
13.
給出兩種檢查表結構的方法。正確答案:①DESCRIBE命令(平時用DESC即可);②DBMS_METADATA.GET_DDL包。[考點]對象
14.
Oracle中哪個包用于生成隨機值?正確答案:DBMS_RANDOM是一個可以生成隨機數(shù)值或者隨機字符串的程序包。這個包有INITIALIZE()、SEED()、TERMINATE()、VALUE()、NORMAL()、RANDOM()、STRING()等幾個函數(shù),它們提供了內(nèi)置的隨機數(shù)生成器,可以用于快速生成隨機數(shù)。[考點]系統(tǒng)包
15.
Oracle中哪個包可以獲取環(huán)境變量的值?正確答案:可以通過DBMS_SYSTEM.GET_ENV來獲取環(huán)境變量的當前生效值。[考點]系統(tǒng)包
16.
如何讓程序等待60s后繼續(xù)運行?_正確答案:可以執(zhí)行$ORACLE_HOME/rdbms/admin/dbmslock.sql來創(chuàng)建DBMS_LOCK包,該包可以實現(xiàn)讓程序暫時等待的功能。若想普通用戶使用該包,則需要在SYS用戶下執(zhí)行“GRANTEXECUTEONDBMS_LOCKTOUSER_XXX;”命令。[考點]系統(tǒng)包
17.
Oracle使用哪個包可以生成并傳遞數(shù)據(jù)庫告警信息?正確答案:DBMS_ALERT包用于生成并傳遞數(shù)據(jù)庫告警信息。若想使用DBMS_ALERT包,則必須以SYS登錄,為普通用戶授予執(zhí)行權限。DBMS_ALERT能讓數(shù)據(jù)庫觸發(fā)器在特定的數(shù)據(jù)庫值發(fā)生變化時向應用程序發(fā)送報警。報警是基于事務的并且是異步的(也就是它們的操作與定時機制無關)。[考點]系統(tǒng)包
18.
程序包DBMS_APPLICATION_INFO.READ_MODULE的作用是什么?正確答案:DBMS_APPLICATION_INFO是一個非常有用的程序包,它提供了通過V$SESSION跟蹤腳本運行情況的能力,該包可以填充V$SESSION中的CLIENT_INFO、MODULE和ACTION這3列的值。在CLIENT_INFO列中存放程序的客戶端信息;MODULE列存放主程序名,如包的名稱;ACTION列存放程序包中的過程名。該包不僅提供了設置這些列值的過程,還提供了返回這些列值的過程。主要有如下的存儲過程:
1)DBMS_APPLICATION_INFO.SET_CLIENT_INFO:填充V$SESSION視圖的CLIENT_INFO列,記錄客戶端的信息,這里可以記錄客戶端的IP地址。
2)DBMS_APPLICATION_INFO.SET_MODULE:填充V$SESSION視圖的MODULE列,記錄主程序名。
3)DBMS_APPLICATION_INFO.READ_CLIENT_INFO:從V$SESSION中讀取客戶端的信息。
4)DBMS_APPLICATION_INFO.READ_MODULE:從V$SESSION中讀取主程序的名稱。[考點]系統(tǒng)包
19.
如何填充V$SESSION的CLIENT_INTO列和CLIENT_IDENTIFIER列?正確答案:V$SESSION的CLIENT_INFO列和CLIENT_IDENTIFIER列往往為空,所以需要寫登錄觸發(fā)器,然后在觸發(fā)器中使用如下的存儲過程記錄這2列的值:
BEGIN
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV','IF_ADDRESS'));
DBMS_SESSION.SET_IDENTIFIER(SYS_CONTEXT('USERENV','HOST'));
END;[考點]系統(tǒng)包
20.
ORA_ROWSCN函數(shù)的作用是什么?正確答案:對于每一行數(shù)據(jù),ORA_ROWSCN返回每一行最近被修改的大概時間,可用于查詢表最后一次被執(zhí)行DML操作的時間。由于Oracle通過事務提交對行所在數(shù)據(jù)塊來進行SCN(SystemChangeNumber,系統(tǒng)改變號,一個由系統(tǒng)內(nèi)部維護的序列號。當系統(tǒng)需要更新的時候自動增加,它是系統(tǒng)中維持數(shù)據(jù)的一致性和順序恢復的重要標志)的跟蹤,所以,它不精確??梢酝ㄟ^在創(chuàng)建表時使用行級別的依賴跟蹤來獲得一個更加精確的SCN。
在對視圖進行查詢時,不能使用ORA_ROWSCN函數(shù),但對于視圖的基表是可以使用ORA_ROWSCN函數(shù)的,也能在UPDATE或DELETE語句的WHERE子句中使用ORA_ROWSCN函數(shù)。ORA_RO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025華潤怡寶飲料(武夷山)有限公司福建招聘模擬筆試試題及答案解析
- 2025廣東清遠市清城區(qū)機關事務管理局招聘后勤服務類人員1人備考考試題庫及答案解析
- 2025貴州安順關嶺自治縣縣域醫(yī)療次中心花江鎮(zhèn)衛(wèi)生院鄉(xiāng)村醫(yī)生招聘4人筆試備考重點題庫及答案解析
- 2025山東聊城幼兒師范學校第二批招聘9人筆試備考重點題庫及答案解析
- 2025福建廈門市集美區(qū)杏東小學頂產(chǎn)假教師招聘1人筆試備考重點試題及答案解析
- 2025江西中暢人力資源有限公司招聘勞務外包工3人備考考試試題及答案解析
- 2025廣東江門市人才發(fā)展集團有限公司招聘3人筆試備考重點試題及答案解析
- 2025年南昌農(nóng)商銀行中層管理崗位人員招聘備考題庫及答案詳解一套
- 中國氣象局在京單位2026年度招聘崗位備考題庫及參考答案詳解一套
- 遼寧省鞍山市海城市高級中學2025-2026學年高一上學期12月月考政治試題
- 2025年10月自考04184線性代數(shù)經(jīng)管類試題及答案含評分參考
- 國開2025年秋《心理學》形成性考核練習1-6答案
- 科技研發(fā)項目管理辦法
- 個體診所藥品清單模板
- 267條表情猜成語【動畫版】
- 銀行IT服務管理事件管理流程概要設計
- 地圖文化第三講古代測繪課件
- LY/T 2230-2013人造板防霉性能評價
- GB/T 34891-2017滾動軸承高碳鉻軸承鋼零件熱處理技術條件
- 國家開放大學電大本科《理工英語4》2022-2023期末試題及答案(試卷號:1388)
- 突發(fā)公共衛(wèi)生事件處置記錄表
評論
0/150
提交評論