Oracle數(shù)據(jù)庫(kù)面試題
1.解釋冷備份和熱備份的不同點(diǎn)以及各自的優(yōu)點(diǎn)
冷備份
發(fā)生在數(shù)據(jù)庫(kù)已經(jīng)正常關(guān)閉的情況下,將關(guān)鍵性文件拷貝到另外位置的一種說(shuō)法。適用于所有模式的數(shù)據(jù)庫(kù)。
優(yōu)點(diǎn)
1. 是非??焖俚膫浞莘椒ǎㄖ恍杩截愇募?/code>
2. 容易歸檔(簡(jiǎn)單拷貝即可)
3. 容易恢復(fù)到某個(gè)時(shí)間點(diǎn)上(只需將文件再拷貝回去)
4. 能與歸檔方法相結(jié)合,作數(shù)據(jù)庫(kù)“最新?tīng)顟B(tài)”的恢復(fù)
5. 低度維護(hù),高度安全。
缺點(diǎn)
1. 單獨(dú)使用時(shí),只能提供到“某一時(shí)間點(diǎn)上”的恢復(fù)。
2. 在實(shí)施備份的全過(guò)程中,數(shù)據(jù)庫(kù)必須要作備份而不能作其它工作。也就是說(shuō),在冷備份過(guò)程中,數(shù)據(jù)庫(kù)必須是關(guān)閉狀態(tài)。
3. 若磁盤(pán)空間有限,只能拷貝到磁帶等其它外部存儲(chǔ)設(shè)備上,速度會(huì)很慢。
4. 不能按表或按用戶(hù)恢復(fù)。
熱備份
是在數(shù)據(jù)庫(kù)仍舊處于工作狀態(tài)時(shí)進(jìn)行備份,采用的是歸檔方式備份數(shù)據(jù)的方法。
優(yōu)點(diǎn)
1. 可在表空間或數(shù)據(jù)庫(kù)文件級(jí)備份,備份的時(shí)間短。
2. 備份時(shí)數(shù)據(jù)庫(kù)仍可使用。
3. 可達(dá)到秒級(jí)恢復(fù)(恢復(fù)到某一時(shí)間點(diǎn)上)。
4. 可對(duì)幾乎所有數(shù)據(jù)庫(kù)實(shí)體做恢復(fù)。
5. 恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫(kù)仍工作時(shí)恢復(fù)。
缺點(diǎn)
1. 不能出錯(cuò),否則后果嚴(yán)重。
2. 若熱備份不成功,所得結(jié)果不可用于時(shí)間點(diǎn)的恢復(fù)。
3. 因難于維護(hù),所以要非凡仔細(xì)小心,不答應(yīng)“以失敗告終”。
不同點(diǎn)
熱備份針對(duì)歸檔模式的數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)仍舊處于工作狀態(tài)時(shí)進(jìn)行備份。而冷備份指在數(shù)據(jù)庫(kù)關(guān)閉后,進(jìn)行備份,適用于所有模式的數(shù)據(jù)庫(kù)。
2.你必須利用備份恢復(fù)數(shù)據(jù)庫(kù),但是你沒(méi)有控制文件,該如何解決問(wèn)題呢?
重建控制文件,用帶 backup control file 子句的 recover 命令恢復(fù)數(shù)據(jù)庫(kù)。
3.如何轉(zhuǎn)換 init.ora 到 spfile ?
使用 create spfile from pfile 命令
4.解釋 data block ,extend 和 segment 的區(qū)別(這里建議用英文術(shù)語(yǔ))
data block 是數(shù)據(jù)庫(kù)中最小的邏輯存儲(chǔ)單元。當(dāng)數(shù)據(jù)庫(kù)的對(duì)象需要更多的物理存儲(chǔ)空間時(shí),連續(xù)的 data block 就組成了 extend. 一個(gè)數(shù)據(jù)庫(kù)對(duì)象擁有的所有 extents 被稱(chēng)為該對(duì)象的 segment
5.給出兩個(gè)查詢(xún)表結(jié)構(gòu)的方法
DESCRIBE 命令
DBMS_METADATA.GET_DDL 包
6.怎樣查看數(shù)據(jù)庫(kù)引擎的報(bào)錯(cuò)
alert log.
7.比較 truncate 和 delete 命令
兩者都可以用來(lái)刪除表中所有的記錄。區(qū)別在于:truncate 是 DDL 操作,它移動(dòng) HWK ,不需要 rollback segment 而 Delete 是 DML 操作,需要 rollback segment 且花費(fèi)較長(zhǎng)時(shí)間
8.使用索引的理由
快速訪(fǎng)問(wèn)表中的 data block
9.給出在 STAR SCHEMA 中的兩種表及他們分別含有的數(shù)據(jù)
Fact tables 和 dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放對(duì) fact table 某些屬性描述的信息
10.FACT Table 上需要建立何種索引?
位圖索引(bitmap index)
11.給出兩種相關(guān)約束?
主鍵和外鍵
12.如何在不影響子表的前提下,重建一個(gè)母表
子表的外鍵強(qiáng)制實(shí)效,重建母表,激活外鍵
13.解釋歸檔和非歸檔模式之間的不同和他們的各自的優(yōu)缺點(diǎn)
歸檔模式是指你可以備份所有的數(shù)據(jù)庫(kù) transactions 并恢復(fù)到任意一個(gè)時(shí)間點(diǎn)。非歸檔模式則相反,不能恢復(fù)到任意一個(gè)時(shí)間點(diǎn)。
但是非歸檔模式可以帶來(lái)數(shù)據(jù)庫(kù)性能上的少許提高
14.如何建立一個(gè)備份控制文件?
Alter database backup control file to trace.
15.給出數(shù)據(jù)庫(kù)正常啟動(dòng)所經(jīng)歷的幾種狀態(tài)?
STARTUP NOMOUNT ?C 數(shù)據(jù)庫(kù)實(shí)例啟動(dòng)
STARTUP MOUNT - 數(shù)據(jù)庫(kù)裝載
STARTUP OPEN ?C 數(shù)據(jù)庫(kù)打開(kāi)
16.哪個(gè) column 可以用來(lái)區(qū)別 V 視圖?
INST_ID 指明集群環(huán)境中具體的某個(gè) instance
17.如何生成 explain plan
運(yùn)行 utlxplan.sql 建立 plan 表
針對(duì)特定 SQL 語(yǔ)句,使用 explain plan set statement_id = 'tst1' into plan_table 運(yùn)行 utlxplp.sql 或 utlxpls.sql 查看 explain plan
18.如何增加 buffer cache 的命中率?
在數(shù)據(jù)庫(kù)較繁忙時(shí),適用 buffer cache advisory 工具,查詢(xún) v$db_cache_advice 如果有必要更改,可以使用 alter system set db_cache_size 命令
19.ORA-01555 的應(yīng)對(duì)方法?
具體的出錯(cuò)信息是 snapshot too old within rollback seg , 通常可以通過(guò)增大 rollback seg 來(lái)解決問(wèn)題。當(dāng)然也需要查看一下具體造成錯(cuò)誤的 SQL 文本
20.解釋 ORACLE_BASE 和 ORACLE_HOME 的區(qū)別
ORACLE_BASE 是 oracle 的根目錄,ORACLE_HOME 是 oracle 產(chǎn)品的目錄。
21.說(shuō)一下什么是 Oracle 分區(qū)
分區(qū)的實(shí)質(zhì)是把一張大表的數(shù)據(jù)按照某種規(guī)則使用多張子表來(lái)存儲(chǔ)。
然后這多張子表使用統(tǒng)一的表名對(duì)外提供服務(wù),子表實(shí)際對(duì)用戶(hù)不可見(jiàn)。類(lèi)似于在多張子表上簡(jiǎn)歷一個(gè)視圖,然后用戶(hù)直接使用該視圖來(lái)訪(fǎng)問(wèn)數(shù)據(jù)。
22. Oracle 分區(qū)在什么情況下使用
當(dāng)一張表的數(shù)據(jù)量到達(dá)上億行的時(shí)候,表的性能會(huì)嚴(yán)重降低,這個(gè)時(shí)候就需要用到分區(qū)了,通過(guò)劃分成多個(gè)小表,并在每個(gè)小表上建立本地索引可以大大縮小索引數(shù)據(jù)文件的大小,從而更快的定位到目標(biāo)數(shù)據(jù)來(lái)提升訪(fǎng)問(wèn)性能。
分區(qū)除了可以用來(lái)提升訪(fǎng)問(wèn)性能外,還因?yàn)榭梢灾付ǚ謪^(qū)所使用的表空間,因此也用來(lái)做數(shù)據(jù)的生命周期管理。當(dāng)前需要頻繁使用的活躍數(shù)據(jù)可以放到訪(fǎng)問(wèn)速度更快但價(jià)格也更貴的存儲(chǔ)設(shè)備上,而 2、3 年前的歷史數(shù)據(jù),或者叫冷數(shù)據(jù)可以放到更廉價(jià)、速度更低的設(shè)備上,從而降低存儲(chǔ)費(fèi)用。
23.說(shuō)一下,Oracle 的分區(qū)有幾種
Oracle 的分區(qū)可以分為:列表分區(qū)、范圍分區(qū)、散列分區(qū)(哈希分區(qū))、復(fù)合分區(qū)。
列表分區(qū):
列表分區(qū)明確指定了根據(jù)某字段的某個(gè)具體值進(jìn)行分區(qū),而不是像范圍分區(qū)那樣根據(jù)字段的值范圍來(lái)劃分的。
范圍分區(qū):
1. 就是根據(jù)數(shù)據(jù)庫(kù)表中某一字段的值的范圍來(lái)劃分分區(qū)。
2. 數(shù)據(jù)中有空值,Oracle 機(jī)制會(huì)自動(dòng)將其規(guī)劃到 maxvalue 的分區(qū)中。
散列分區(qū)(哈希分區(qū))
1. 根據(jù)字段的 hash 值進(jìn)行均勻分布,盡可能地實(shí)現(xiàn)各分區(qū)所散列的數(shù)據(jù)相等。
2. 散列分區(qū)即為哈希分區(qū),Oracle 采用哈希碼技術(shù)分區(qū),具體分區(qū)如何由 Oracle 說(shuō)的算,也可能我下一次搜索就不是這個(gè)數(shù)據(jù)了。
復(fù)合分區(qū)
根據(jù)范圍分區(qū)后,每個(gè)分區(qū)內(nèi)的數(shù)據(jù)再散列地分布在幾個(gè)表空間中,這樣我們就要使用復(fù)合分區(qū)。復(fù)合分區(qū)是先使用范圍分區(qū),然后在每個(gè)分區(qū)同再使用散列分區(qū)的一種分區(qū)方法。
24.在千萬(wàn)級(jí)的數(shù)據(jù)庫(kù)查詢(xún)中,如何提高效率?
分別從數(shù)據(jù)庫(kù)設(shè)計(jì)方面、SQL 優(yōu)化語(yǔ)句方面,物理優(yōu)化方面
數(shù)據(jù)庫(kù)設(shè)計(jì)方面
- 對(duì)查詢(xún)進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。
2. 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如: select id from t where num is null 可以在 num 上設(shè)置默認(rèn)值 0 ,確保表中 num 列沒(méi)有 null 值,然后這樣查詢(xún):select id from t where num = 0
- 并不是所有索引對(duì)查詢(xún)都有效,SQL 是根據(jù)表中數(shù)據(jù)來(lái)進(jìn)行查詢(xún)優(yōu)化的,當(dāng)索引列有大量數(shù)據(jù)重復(fù)時(shí),查詢(xún)可能不會(huì)去利用索引。如一表中有字段 sex、male、female 幾乎各占一半,那么即使在 sex 上建了索引也對(duì)查詢(xún)效率起不了作用。
4. 索引并不是越多越好,索引固然可以提高相應(yīng)的 select 的效率,但同時(shí)也降低了 insert 及 update 的效率,因?yàn)?insert 或 update 時(shí)有可能會(huì)重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個(gè)表的索引數(shù)最好不要超過(guò) 6 個(gè),若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。
- 應(yīng)盡可能的避免更新索引數(shù)據(jù)列,因?yàn)樗饕龜?shù)據(jù)列的順序就是表記錄的物理存儲(chǔ)順序,一旦該列值改變將導(dǎo)致整個(gè)表記錄的順序的調(diào)整,會(huì)耗費(fèi)相當(dāng)大的資源。若應(yīng)用系統(tǒng)需要頻繁更新索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為索引。
6. 盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢(xún)和連接的性能,并會(huì)增加存儲(chǔ)開(kāi)銷(xiāo)。這是因?yàn)橐嬖谔幚聿樵?xún)和連接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對(duì)于數(shù)字型而言只需要比較一次就夠了。
- 盡可能的使用 varchar/nvarchar 代替 char/nchar,因?yàn)槭紫茸冮L(zhǎng)字段存儲(chǔ)空間小,可以節(jié)省存儲(chǔ)空間,其次對(duì)于查詢(xún)來(lái)說(shuō),在一個(gè)相對(duì)較小的字段內(nèi)搜索效率顯然要高些。
8. 盡量使用表變量來(lái)代替臨時(shí)表。如果表變量包含大量數(shù)據(jù),請(qǐng)注意索引非常有限(只有主鍵索引)。
- 避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。
10. 臨時(shí)表并不是不可使用,適當(dāng)?shù)厥褂盟鼈兛梢允鼓承├谈行?,例如,?dāng)需要重復(fù)引用大型表或常用表中的某個(gè)數(shù)據(jù)集時(shí)。但是,對(duì)于一次性事件,最好使用導(dǎo)出表。
- 在新建臨時(shí)表時(shí),如果一次性插入數(shù)據(jù)量很大,那么可以使用 select into 代替 create table,避免造成大量log,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。
12. 如果使用到了臨時(shí)表,在存儲(chǔ)過(guò)程的最后務(wù)必將所有的臨時(shí)表顯式刪除,先 truncate table,然后 drop table,這樣可以避免系統(tǒng)表的較長(zhǎng)時(shí)間鎖定。
從 SQL 語(yǔ)句方面
- 應(yīng)盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。
2. 應(yīng)盡量避免在 where 子句中使用 or 來(lái)連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:select id from t where num = 10 or num = 20 可以這樣查間:select id from t where num = 10 union all select id from t where num = 20
- in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,如:select id from t where num in(1,2,3)對(duì)于連續(xù)的數(shù)值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
4. 下面的查詢(xún)也將導(dǎo)致全表掃描:select id from t where name like '%abc%'
- 如果在 where 子句中使用參數(shù),也會(huì)導(dǎo)致全表掃描。因?yàn)?SQL 只有在運(yùn)行時(shí)才會(huì)解析局部變量,但優(yōu)化程序不能將訪(fǎng)問(wèn)計(jì)劃的選擇推遲到運(yùn)行時(shí);它必須在編譯時(shí)進(jìn)行選擇。然而,如果在編譯時(shí)建立訪(fǎng)問(wèn)計(jì)劃,變量的值還是未知的,因而無(wú)法作為索引選擇的輸入項(xiàng)。如下面語(yǔ)句將進(jìn)行全表掃描:select id from t where num = @num可以改為強(qiáng)制查詢(xún)使用索引:select id from t with(index(索引名) where num=@num
6. 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。 如:select id from t where num/2 = 100 應(yīng)改為:select id from t where num = 100*2
- 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。
如:select id from t where substring(name,1,3) = ‘a(chǎn)bc’ - name 以 abc 開(kāi)頭的 id
select id from t where datediff(day,createdate,‘2005-11-30’) = 0 - ‘2005-11-30’ 生成的 id
應(yīng)改為:select id from t where name like ‘a(chǎn)bc%’ ,
select id from t where createdate >= ‘2005-11-30’ and createdate < ‘2005-12-1’ 不要在 where 子句中的 " = " 左邊進(jìn)行函數(shù)、算術(shù)運(yùn)算或其他表達(dá)式運(yùn)算,否則系統(tǒng)將可能無(wú)法正確使用索引。
8. 如需要生成一個(gè)空表結(jié)構(gòu):select col1,col2 into #t from t where1 = 0 這類(lèi)代碼不會(huì)返回任何結(jié)果集,但是會(huì)消耗系統(tǒng)資源的,應(yīng)改成這樣:create table #t(...)
- 很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇:
select num from a where num in(select num from b)
用下面的語(yǔ)句替換:select num from a where exists(select 1 from b where num = a.num)
10. 任何地方都不要使用 select from t,用具體的字段列表代替 "" ,不要返回用不到的任何字段。
- 盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過(guò) 1 萬(wàn)行,那么就應(yīng)該考慮改寫(xiě)。
12. 盡量避免向客戶(hù)返回大數(shù)據(jù)量,若數(shù)據(jù)量過(guò)大,應(yīng)該考慮相應(yīng)需求是否合理。
- 盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。
物理優(yōu)化方面
1. Oracle 的運(yùn)行環(huán)境(網(wǎng)絡(luò),硬件等)
2. 使用合適的優(yōu)化器
3. 合理配置 oracle 實(shí)例參數(shù)
4. 建立合適的索引(減少 IO )
5. 將索引數(shù)據(jù)和表數(shù)據(jù)分開(kāi)在不同的表空間上(降低O沖突)
6. 建立表分區(qū),將數(shù)據(jù)分別存儲(chǔ)在不同的分區(qū)上(以空間換取時(shí)間,減少 IO )
25.使用存儲(chǔ)過(guò)程訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)比直接用SQL語(yǔ)句訪(fǎng)問(wèn)有何優(yōu)點(diǎn)?
1. 存儲(chǔ)過(guò)程是預(yù)編譯過(guò)的,執(zhí)行時(shí)不須編譯,執(zhí)行速度更快。
2. 存儲(chǔ)過(guò)程封裝了多條 SQL ,便于維護(hù)數(shù)據(jù)的完整性與一致性。
3. 實(shí)現(xiàn)代碼復(fù)用。
26.索引是用來(lái)干什么的?有那些約束建立索引?
說(shuō)下你怎么使用索引的?使用索引的好處和壞處?
1. 索引用于對(duì)指定字段查詢(xún)時(shí),提升查詢(xún)速度。
2. 主要有 B 樹(shù)索引,位圖索引,函數(shù)索引。
3. 對(duì)查詢(xún)頻率比較高的字段做索引,但一張表不要做太多索引。
4. 索引能提升查詢(xún)效率,但它占用存儲(chǔ)空間,且在更新數(shù)據(jù)時(shí)也會(huì)影響更新效率。
27.說(shuō)下內(nèi)連接,左連接,右連接的區(qū)別
內(nèi)連接:
指主表,從表中符合連接條件的記錄全部顯示
左連接:外連接方式,主要是顯示主表,從表中符合連接條件的記錄,并且主表中所有不符合連接條件的記錄也要顯示。
右連接:外連接方式,主要是顯示主表,從表中所有符合連接條件的記錄,并且從表中不符合的記錄也要顯示。
28.說(shuō)說(shuō) Oracle 中經(jīng)常使用到的函數(shù)
length 長(zhǎng)度、lower 小寫(xiě)、upper 大寫(xiě)、to_date 轉(zhuǎn)化日期、to_char 轉(zhuǎn)化字符、to_number 轉(zhuǎn)化數(shù)字、Ltrim 去左邊空格、rtrim 去右邊空格、substr 截取字符串、add month 增加或減掉月份
29.truncate 和 delete 區(qū)別
1. Truncate 和 delete 都可以將數(shù)據(jù)實(shí)體刪掉,truncate 的操作并不記錄到 rollback 日志,所以操作速度較快,但同時(shí)這個(gè)數(shù)據(jù)不能恢復(fù)
2. Delete 操作不騰出表空間的空間
3. Truncate 不能對(duì)視圖等進(jìn)行刪除
4. Truncate 是數(shù)據(jù)定義語(yǔ)言(DDL),而 delete 是數(shù)據(jù)操縱語(yǔ)言(DML)
30.存儲(chǔ)過(guò)程、函數(shù)、游標(biāo)在項(xiàng)目中怎么用的
存儲(chǔ)過(guò)程:
1. 能夠批量執(zhí)行的一組 SQL 語(yǔ)句,且容易控制事務(wù)。但沒(méi)有返回值,可以通過(guò)設(shè)置 in out | out 類(lèi)型的參數(shù)返回結(jié)果
2. 存儲(chǔ)過(guò)程可以沒(méi)有參數(shù),不需要返回值
函數(shù):
與存儲(chǔ)過(guò)程相似,函數(shù)可以沒(méi)有參數(shù),但是一定需要一個(gè)返回值
游標(biāo):
游標(biāo)類(lèi)以指針,游標(biāo)可以執(zhí)行多個(gè)不相關(guān)的操作,如果希望當(dāng)產(chǎn)生了結(jié)果集后,對(duì)結(jié)果集中的數(shù)據(jù)進(jìn)行多種不相關(guān)的數(shù)據(jù)操作
31.存儲(chǔ)過(guò)程的操作 當(dāng)它拋出異常的時(shí)候 你是如何解決的 用了什么技術(shù)
1. 中止當(dāng)前語(yǔ)句執(zhí)行,轉(zhuǎn)到 exception 語(yǔ)句塊執(zhí)行。
2. 在異常處理時(shí),捕獲相應(yīng)異常,并執(zhí)行對(duì)應(yīng)解決方案語(yǔ)句。
32. Oracle 的游標(biāo)在存儲(chǔ)過(guò)程里是放在 begin 與 end 的里面還是外面?
Oracle的存儲(chǔ)過(guò)程跟函數(shù)你寫(xiě)沒(méi)有?項(xiàng)目中用到?jīng)]有?怎么用的?
1. 放在 begin 與 end 之間。
2. 用作多表連接查詢(xún)數(shù)據(jù)返回結(jié)果查詢(xún)。
3. 復(fù)雜的業(yè)務(wù)操作,涉及多表的數(shù)據(jù)操作的事務(wù)控制。
4. 預(yù)防 SQL 注入。
33. oracle 中存儲(chǔ)過(guò)程,游標(biāo)和函數(shù)的區(qū)別
1. 游標(biāo)類(lèi)似指針,游標(biāo)可以執(zhí)行多個(gè)不相關(guān)的操作如果希望當(dāng)產(chǎn)生了結(jié)果集后,對(duì)結(jié)果集中的數(shù)據(jù)進(jìn)行多種不相關(guān)的數(shù)據(jù)操作
2. 函數(shù)可以理解函數(shù)是存儲(chǔ)過(guò)程的一種;函數(shù)可以沒(méi)有參數(shù),但是一定需要一個(gè)返回值,存儲(chǔ)過(guò)程可以沒(méi)有參數(shù),不需要返回值;兩者都可以通過(guò) out 參數(shù)返回值,如果需要返回多個(gè)
3. 參數(shù)則建議使用存儲(chǔ)過(guò)程;在 SQL 數(shù)據(jù)操縱語(yǔ)句中只能調(diào)用函數(shù)而不能調(diào)用存儲(chǔ)過(guò)程
34.解釋什么是死鎖,如何解決Oracle中的死鎖?
簡(jiǎn)言之就是存在加了鎖而沒(méi)有解鎖,可能是使用鎖沒(méi)有提交或者回滾事務(wù),如果是表級(jí)鎖則不能操作表,客戶(hù)端處于等在狀態(tài),如果是行級(jí)鎖則不能操作鎖定行
解決辦法:
查找出被鎖的表
select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id a.object_id;
select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id b.sid order by b.logon_time;
殺進(jìn)程中的會(huì)話(huà)
alter system kill session "sid,serial#";
35.不借助第三方工具,怎樣查看 SQL 的執(zhí)行計(jì)劃
set autot on
explain plan set statement_id =&item_id for &sql
select from table(dbms_xplan.display);
36.如何定位重要(消耗資源多)的 SQL
select sql_text
from v$sql
where disk_reads > 1000 or (executions > 0 and
buffer_gets/executions > 30000);
37.觸發(fā)器的作用有哪些?
1. 觸發(fā)器可通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改;通過(guò)級(jí)聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。
2. 觸發(fā)器可以強(qiáng)制比用 CHECK 約束定義的約束更為復(fù)雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另個(gè)表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作,如修改數(shù)據(jù)或顯示用戶(hù)定義錯(cuò)誤信息。
3. 觸發(fā)器還可以強(qiáng)制執(zhí)行業(yè)務(wù)規(guī)則
4. 觸發(fā)器也可以評(píng)估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對(duì)策。
38. Oralce 怎樣存儲(chǔ)文件,能夠存儲(chǔ)哪些文件?
1. Oracle 能存儲(chǔ) clob、nclob、blob、bfile
2. Clob 可變長(zhǎng)度的字符型數(shù)據(jù),也就是其他數(shù)據(jù)庫(kù)中提到的文本型數(shù)據(jù)類(lèi)型
3. Nclob 可變字符類(lèi)型的數(shù)據(jù),不過(guò)其存儲(chǔ)的是 Unicode 字符集的字符數(shù)據(jù)
4. Blob 可變長(zhǎng)度的二進(jìn)制數(shù)據(jù)
5. Bfile 數(shù)據(jù)庫(kù)外面存儲(chǔ)的可變二進(jìn)制數(shù)據(jù)
39.說(shuō)下如何使用 Oracle 的游標(biāo)?
1. oracle 中的游標(biāo)分為顯示游標(biāo)和隱式游標(biāo)
2. 顯示游標(biāo)是用 cursor...is 命令定義的游標(biāo),它可以對(duì)查詢(xún)語(yǔ)句 (select) 返回的多條記錄進(jìn)行處理;隱式游標(biāo)是在執(zhí)行插入 (insert) 、刪除 (delete) 、修改 (update) 和返回單條記錄的查詢(xún) (select) 語(yǔ)句時(shí)由 PL/SQL 自動(dòng)定義的。
3. 顯式游標(biāo)的操作:打開(kāi)游標(biāo)、操作游標(biāo)、關(guān)閉游標(biāo);PL/SQL 隱式地打開(kāi) SQL 游標(biāo),并在它內(nèi)部處理 SQL 語(yǔ)句,然后關(guān)閉它
40.說(shuō)下 Oracle 中 function 和 procedure 的區(qū)別?
1. 可以理解函數(shù)是存儲(chǔ)過(guò)程的一種
2. 函數(shù)可以沒(méi)有參數(shù),但是一定需要一個(gè)返回值,存儲(chǔ)過(guò)程可以沒(méi)有參數(shù),不需要返回值
3. 函數(shù) return 返回值沒(méi)有返回參數(shù)模式,存儲(chǔ)過(guò)程通過(guò) out 參數(shù)返回值,如果需要返回多個(gè)參數(shù)則建議使用存儲(chǔ)過(guò)程
4. 在 SQL 數(shù)據(jù)操縱語(yǔ)句中只能調(diào)用函數(shù)而不能調(diào)用存儲(chǔ)過(guò)程
41.說(shuō)下 Oracle 的導(dǎo)入導(dǎo)出有幾種方式,有何區(qū)別?
1. 使用 Oracle 工具 exp/imp
2. 使用 PLSQL 相關(guān)工具
方法1. 導(dǎo)入/導(dǎo)出的是二進(jìn)制的數(shù)據(jù)
方法2. PLSQL 導(dǎo)入/導(dǎo)出的是 SQL 語(yǔ)句的文本文件
42.說(shuō)下 Oracle 中有哪幾種文件?
1. 數(shù)據(jù)文件(一般后綴為 .dbf 或者 .ora )
2. 日志文件(后綴名.log)
3. 控制文件(后綴名為.c
43.說(shuō)下 oracle 中 DML、DDL、DCL的使用有哪些
1. DML數(shù)據(jù)操縱語(yǔ)言,如 select、update、delete、insert
2. DDL 數(shù)據(jù)定義語(yǔ)言,如 create table、drop table 等等
3. DCL 數(shù)據(jù)控制語(yǔ)言,如commit、rollback、grant、invoke等
44.說(shuō)下怎樣創(chuàng)建一個(gè)視圖,視圖的好處,視圖可以控制權(quán)限嗎?
create view 視圖名 as select 列名 [別名] ... from 表 [unio [all] select ... ]]
好處:
1. 可以簡(jiǎn)單的將視圖理解為 SQL 查詢(xún)語(yǔ)句,視圖最大的好處是不占系統(tǒng)空間
2. 一些安全性很高的系統(tǒng),不會(huì)公布系統(tǒng)的表結(jié)構(gòu),可能會(huì)使用視圖將一些敏感信息過(guò)慮或者重命名后公布結(jié)構(gòu)
3. 簡(jiǎn)化查詢(xún)
4. 視圖可以控制權(quán)限的,在使用的時(shí)候需要將視圖的使用權(quán)限 grant 給用戶(hù)
45.說(shuō)下 Oracle 的鎖有幾種,定義分別是什么?
1. 行共享鎖(ROW SHARE)
2. 行排他鎖(ROW EXCLUSIVE)
3. 共享鎖(SHARE)
4. 共享行排他鎖(SHARE ROW EXCLUSIVE)
5. 排他鎖(EXCLUSIVE)
Oracle 鎖具體分為以下幾類(lèi):
1. 按用戶(hù)與系統(tǒng)劃分,可以分為自動(dòng)鎖與顯示鎖
1. 自動(dòng)鎖:當(dāng)進(jìn)行一項(xiàng)數(shù)據(jù)庫(kù)操作時(shí),缺省情況下,系統(tǒng)自動(dòng)為此數(shù)據(jù)庫(kù)操作獲得所有有必要的鎖。
2. 顯示鎖:某些情況下,需要用戶(hù)顯示的鎖定數(shù)據(jù)庫(kù)操作要用到的數(shù)據(jù),才能使數(shù)據(jù)庫(kù)操作執(zhí)行得更好,顯示鎖是用戶(hù)為數(shù)據(jù)庫(kù)對(duì)象設(shè)定的。
2. 按鎖級(jí)別劃分,可分為共享鎖與排它鎖
共享鎖:
共享鎖使一個(gè)事務(wù)對(duì)特定數(shù)據(jù)庫(kù)資源進(jìn)行共享訪(fǎng)問(wèn)一一另一事務(wù)也可對(duì)此資源進(jìn)行訪(fǎng)問(wèn)或獲得相同共享鎖。共享鎖為事務(wù)提供高并發(fā)性,但如拙劣的事務(wù)設(shè)計(jì) + 共享鎖容易造成死鎖或數(shù)據(jù)更新丟失。
排它鎖:
事務(wù)設(shè)置排它鎖后,該事務(wù)單獨(dú)獲得此資源,另一事務(wù)不能在此事務(wù)提交之前獲得相同對(duì)象的共享鎖或排它鎖。
3. 按操作劃分,可分為 DML 鎖、DDL 鎖。DML 鎖又可以分為,行鎖、表鎖、死鎖
DML鎖:
1. **行鎖:**當(dāng)事務(wù)執(zhí)行數(shù)據(jù)庫(kù)插入、更新、刪除操作時(shí),該事務(wù)自動(dòng)獲得操作表中操作行的排它鎖。
2. **表級(jí)鎖:**當(dāng)事務(wù)獲得行鎖后,此事務(wù)也將自動(dòng)獲得該行的表鎖(共享鎖),以防止其它事務(wù)進(jìn)行 DDL 語(yǔ)句影響記錄行的更新。事務(wù)也可以在進(jìn)行過(guò)程中獲得共享鎖或排它鎖,只有當(dāng)事務(wù)顯示使用 LOCK TABLE 語(yǔ)句顯示的定義一個(gè)排它鎖時(shí),事務(wù)才會(huì)獲得表上的排它鎖,也可使用 LOCK TABLE 顯示的定義一個(gè)表級(jí)的共享鎖 (LOCK TABLE具體用法請(qǐng)參考相關(guān)文檔)。3. **死鎖:**當(dāng)兩個(gè)事務(wù)需要一組有沖突的鎖,而不能將事務(wù)繼續(xù)下去的話(huà),就會(huì)出現(xiàn)死鎖。
如事務(wù) 1 在表A行記錄 #3 中有一排它鎖,并等待事務(wù)2在表A中記錄#4中排它鎖的釋放,而事務(wù)2在表A記錄行#4中有一排它鎖,并等待事務(wù);1在表A中記錄#3中排它鎖的釋放,事務(wù)1與事務(wù)2彼此等待,因此就造成了死鎖。
?死鎖一般是因拙劣的事務(wù)設(shè)計(jì)而產(chǎn)生,死鎖只能使用 SQL 下:alter system kill session "sid,serial#"; 或者使用相關(guān)操作系統(tǒng) kill 進(jìn)程的命令,如 UNlX 下 kill -9 sid ,或者使用其它工具殺掉死鎖進(jìn)程。
DDL鎖:
?DDL鎖又可以分為:
?排它 DDL 鎖、共享 DDL 鎖、分析鎖
1. **排它 DDL 鎖:** 創(chuàng)建、修改、刪除一個(gè)數(shù)據(jù)庫(kù)對(duì)象的 DDL 語(yǔ)句獲得操作對(duì)象的排它鎖。如使用 alter table 語(yǔ)句時(shí),為了維護(hù)數(shù)據(jù)的完成性、一致性、合法性,該事務(wù)獲得一排它 DDL 鎖。
2. **共享 DDL 鎖:**需在數(shù)據(jù)庫(kù)對(duì)象之間建立相互依賴(lài)關(guān)系的 DDL 語(yǔ)句通常需共享獲得 DDL 鎖。如創(chuàng)建一個(gè)包,該包中的過(guò)程與函數(shù)引用了不同的數(shù)據(jù)庫(kù)表,當(dāng)編譯此包時(shí),該事務(wù)就獲得了引用表的共享 DDL 鎖。3.
分析鎖:
ORACLE 使用共享池存儲(chǔ)分析與優(yōu)化過(guò)的 SQL 語(yǔ)句及 PL/SQL 程序,使運(yùn)行相同語(yǔ)句的應(yīng)用速度更快。在一個(gè)在共享池中緩存的對(duì)象獲得它所引用數(shù)據(jù)庫(kù)對(duì)象的分析鎖。分析鎖是一種獨(dú)特的 DDL 鎖類(lèi)型,ORACLE使用它追蹤共享池對(duì)象及它所引用數(shù)據(jù)庫(kù)對(duì)象之間的依賴(lài)關(guān)系。當(dāng)一個(gè)事務(wù)修改或刪除了共享池持有分析鎖的數(shù)據(jù)庫(kù)對(duì)象時(shí),ORACLE 使共享池中的對(duì)象作廢,下次在引用這條 SQL/PLSQL 語(yǔ)句時(shí),ORACLE 重新分析編譯此語(yǔ)句。
4. 內(nèi)部閂鎖
內(nèi)部閂鎖:這是 ORACLE 中的一種特殊鎖,用于順序訪(fǎng)問(wèn)內(nèi)部系統(tǒng)結(jié)構(gòu)。當(dāng)事務(wù)需向緩沖區(qū)寫(xiě)入信息時(shí),為了使用此塊內(nèi)存區(qū)域,ORACLE 首先必須取得這塊內(nèi)存區(qū)域的閂鎖,才能向此塊內(nèi)存寫(xiě)入信息。
46. delete 與 Truncate 區(qū)別?
1. Truncate 是 DDL 語(yǔ)句,DELETE 是 DML 語(yǔ)句。
2. Truncate 的速度遠(yuǎn)快于 DELETE;
原因是: 當(dāng)執(zhí)行 DELETE 操作時(shí)所有表數(shù)據(jù)先被 copy 到回滾表空間,數(shù)據(jù)量不同花費(fèi)時(shí)間長(zhǎng)短不一。而 TRUNCATE 是直接刪除數(shù)據(jù)不進(jìn)回滾表空間。3. delete 數(shù)據(jù)可以運(yùn)行 Rollback 進(jìn)行數(shù)據(jù)回滾。而 Truncate 則是永久刪除不能回滾。
4. Truncate 操作不會(huì)觸發(fā)表上的 delete 觸發(fā)器,而 delete 會(huì)正常觸發(fā)。5. Truncate 語(yǔ)句不能帶 where 條件意味著只能全部數(shù)據(jù)刪除,而 DELETE 可帶 where 條件進(jìn)行刪除數(shù)據(jù)。
6. Truncate 操作會(huì)重置表的高水位線(xiàn)(High Water Mark),而 delete 不會(huì)。
47.集合操作符
1. Union:不包含重復(fù)值,默認(rèn)按第一個(gè)查詢(xún)的第一列升序排列。
2. Union ALL:完全并集包含重復(fù)值。不排序。
3. Minus > 不包含重復(fù)值,不排序。
48.數(shù)據(jù)庫(kù)的三大范式是什么?
1. 第一范式:原子性,要求每一列的值不能再拆分了。
2. 第二范式:一張表只描述一個(gè)實(shí)體(若列中有冗余數(shù)據(jù),則不滿(mǎn)足)。
3. 第三范式:所有列與主鍵值直接相關(guān)。
49.事務(wù)的特性(ACID)是指什么?
1. 原子性(Atomic):事務(wù)中的各項(xiàng)操作,要么全做要么全不做,任何一項(xiàng)操作的失敗都會(huì)導(dǎo)數(shù)整個(gè)事務(wù)的失敗。
2. 一致性(Consistent):事務(wù)結(jié)束后系統(tǒng)狀態(tài)是一樣的。
3. 隔離性(Isolated):并發(fā)執(zhí)行的事務(wù)彼此無(wú)法看到對(duì)方的中間狀態(tài)。
4. 持久性(Durable):事務(wù)完成后,即使發(fā)生災(zāi)難性故障,通過(guò)日志和同步備份可以在故障發(fā)生后重建數(shù)據(jù)。
50. MySQL 數(shù)據(jù)庫(kù)與 Oracle 數(shù)據(jù)庫(kù)有什么區(qū)別?
1. 應(yīng)用方面,MySQL 是中小型應(yīng)用的數(shù)據(jù)庫(kù)。一般用于個(gè)人和中小型企業(yè)。Oracle 屬于大型數(shù)據(jù)庫(kù),一般用于具有相當(dāng)規(guī)模的企業(yè)應(yīng)用。
2. 自動(dòng)增長(zhǎng)的數(shù)據(jù)類(lèi)型方面:MySQL 有自動(dòng)增長(zhǎng)的數(shù)據(jù)類(lèi)型。Oracle 沒(méi)有自動(dòng)增長(zhǎng)的數(shù)據(jù)類(lèi)型。需要建立一個(gè)自增序列。
3. group by 用法:MySQL 中 group by 在 SELECT 語(yǔ)句中可以隨意使用,但在 ORACLE 中如果查詢(xún)語(yǔ)句中有組函數(shù),那么其他列必須是組函數(shù)處理過(guò)的或者是 group by 子句中的列,否則會(huì)報(bào)錯(cuò)。
4. 引導(dǎo)方面:MySQL 中可以用單引號(hào)、雙引號(hào)包起字符串,Oracle 中只可以用單引號(hào)包起字符串。
51. Oracle 跟 SQL Server 2005 的區(qū)別?
宏觀上:
1. 最大的區(qū)別在于平臺(tái),oracle 可以運(yùn)行在不同的平臺(tái)上,SQL Server 只能運(yùn)行在 Windows 平臺(tái)上,由于 Windows 平臺(tái)的穩(wěn)定性和安全性影響了 SQL Server 的穩(wěn)定性和安全性
2. oracle 使用的腳本語(yǔ)言為 PL-SQL,而SQL Server 使用的腳本為T(mén)-SQL
微觀上
從數(shù)據(jù)類(lèi)型,數(shù)據(jù)庫(kù)的結(jié)構(gòu)等等回答
52.如何使用 Oracle 的游標(biāo)?
1. oracle 中的游標(biāo)分為顯示游標(biāo)和隱式游標(biāo)
2. 顯示游標(biāo)是用 cursor…is 命令定義的游標(biāo),它可以對(duì)查詢(xún)語(yǔ)句 (select) 返回的多條記錄進(jìn)行處理;隱式游標(biāo)是在執(zhí)行插入 (insert) 、刪除 (delete) 、修改 (update) 和返回單條記錄的查詢(xún) (select) 語(yǔ)句時(shí)由 PL/SQL 自動(dòng)定義的。3. 顯式游標(biāo)的操作:打開(kāi)游標(biāo)、操作游標(biāo)、關(guān)閉游標(biāo);PL/SQL 隱式地打開(kāi) SQL游標(biāo),并在它內(nèi)部處理 SQL 語(yǔ)句,然后關(guān)閉它
53. 解釋 data block,extent 和 segment 的區(qū)別?
1. data block 數(shù)據(jù)塊,是 oracle 最小的邏輯單位,通常 oracle 從磁盤(pán)讀寫(xiě)的就是塊
2. extent 區(qū),是由若干個(gè)相鄰的 block 組成
3. segment 段,是有一組區(qū)組成
4. tablespace 表空間,數(shù)據(jù)庫(kù)中數(shù)據(jù)邏輯存儲(chǔ)的地方,一個(gè) tablespace 可以包含多個(gè)數(shù)據(jù)文件
54.怎樣創(chuàng)建一個(gè)一個(gè)索引,索引使用的原則,有什么優(yōu)點(diǎn)和缺點(diǎn)
創(chuàng)建標(biāo)準(zhǔn)索引:
CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空間名;
創(chuàng)建唯一索引:CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空間名;
創(chuàng)建組合索引:CREATE INDEX 索引名 ON 表名(列名1,列名2)TABLESPACE 表空間名;
創(chuàng)建反向鍵索引:CREATE INDEX 索引名 ON 表名(列名)reverse TABLESPACE 表空間名;
索引使用原則:
1. 索引字段建議建立 NOT NULL 約束
2. 經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引;
3. 經(jīng)常出現(xiàn)在 where 子句中的字段且過(guò)濾性很強(qiáng)的,特別是大表的字段,應(yīng)該建立索引;
4. 可選擇性高的關(guān)鍵字,應(yīng)該建立索引;
5. 可選擇性低的關(guān)鍵字,但數(shù)據(jù)的值分布差異很大時(shí),選擇性數(shù)據(jù)比較少時(shí)仍然可以利用索引提高效率
復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替
1. 正確選擇復(fù)合索引中的第一個(gè)字段,一般是選擇性較好的且在 where 子句中常用的字段上;
2. 復(fù)合索引的幾個(gè)字段經(jīng)常同時(shí) AND 方式出現(xiàn)在 where 子句中可以建立復(fù)合索引;否則單字段索引;
3. 如果復(fù)合索引中包含的字段經(jīng)常單獨(dú)出現(xiàn)在 where 子句中,則分解為多個(gè)單字段索引;
4. 如果復(fù)合索引所包含的字段超過(guò)3個(gè),那么仔細(xì)考慮其必要性,考慮減少?gòu)?fù)合的字段;
5. 如果既有單字段索引,又有這幾個(gè)字段上的復(fù)合索引,一般可以刪除復(fù)合索引;
頻繁 DML 的表,不要建立太多的索引;
不要將那些頻繁修改的列作為索引列;
索引的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1. 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性
2. 大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因
3. 加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義
4. 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢(xún)中分組和排序的時(shí)間
缺點(diǎn):
1. 索引創(chuàng)建在表上,不能創(chuàng)建在視圖上
2. 創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加
3. 索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大
4. 當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度
55.如何判斷數(shù)據(jù)庫(kù)的時(shí)區(qū)?
SELECT DBTIMEZONE FROM DUAL;
56.解釋GLOBAL NAMES設(shè)為T(mén)RUE的用途?
GLOBAL_NAMES 指明聯(lián)接數(shù)據(jù)庫(kù)的方式。如果這個(gè)參數(shù)設(shè)置為 TRUE ,在建立數(shù)據(jù)庫(kù)鏈接時(shí)就必須用相同的名字連結(jié)遠(yuǎn)程數(shù)據(jù)庫(kù)
57.如何加密 PL/SQL 程序?
WRAP
58.解釋 FUNCATION,PROCEDURE 和 PACKAGE 區(qū)別
function 和 procedure 是 PL/SQL 代碼的集合,通常為了完成一個(gè)任務(wù)。
procedure 不需要返回任何值而 function 將返回一個(gè)值
Package 是為了完成個(gè)商業(yè)功能的一組 function 和 proceudre 的集合
59.解釋TABLE Function的用途
TABLE Function 是通過(guò) PL/SQL 邏輯返回一組紀(jì)錄,用于普通的表/視圖。他們也用于 pipeline 和 ETL 過(guò)程。
60.舉出 3 種可以收集 three advisory statistics
Buffer Cache Advice,Segment Level Statistics,Timed Statistics
61. Audit trace 存放在哪個(gè) oracle 目錄結(jié)構(gòu)中?
unix $ORACLE_HOME/rdbms/audit Windows the event viewer
62.解釋 materialized views的作用
Materialized views 用于減少那些匯總,集合和分組的信息的集合數(shù)量。它們通 常適合于數(shù)據(jù)倉(cāng)庫(kù)和 DSS 系統(tǒng)。
63.當(dāng)用戶(hù)進(jìn)程出錯(cuò),哪個(gè)后臺(tái)進(jìn)程負(fù)責(zé)清理它
PMON
64.哪個(gè)后臺(tái)進(jìn)程刷新 materialized views?
The Job Queue Processes.
65.如何判斷哪個(gè) session 正在連結(jié)以及它們等待的資源?
`V SESSION_WAIT
66.描述什么是 redo logs
Redo Logs 是用于存放數(shù)據(jù)庫(kù)數(shù)據(jù)改動(dòng)狀況的物理和邏輯結(jié)構(gòu)??梢杂脕?lái)修復(fù)數(shù)據(jù)庫(kù)
67.如何進(jìn)行強(qiáng)制 LOG SWITCH?
ALTER SYSTEM SWITCH LOGFILE;
68.舉出兩個(gè)判斷 DDL 改動(dòng)的方法?
你可以使用 Logminer 或 Streams
69. Coalescing 做了什么?
Coalescing 針對(duì)于字典管理的 tablespace 進(jìn)行碎片整理,將臨近的小 extent合并成單個(gè)的大extent
70. TEMPORARY tablespace 和 PERMANENT tablespace 的區(qū)別是?
A temporary tablespace 用于臨時(shí)對(duì)象例如排序結(jié)構(gòu)而 tablespaces 用來(lái)存儲(chǔ)那些'真實(shí)'的對(duì)象(例如表,回滾段等)
71.創(chuàng)建數(shù)據(jù)庫(kù)時(shí)自動(dòng)建立的tablespace名稱(chēng)?
SYSTEM tablespace.
72.創(chuàng)建用戶(hù)時(shí),需要賦予新用戶(hù)什么權(quán)限才能使它聯(lián)上數(shù)據(jù)庫(kù)
CONNECT
73.如何在 tablespace 里增加數(shù)據(jù)文件?
ALTER TABLESPACE <tablespace_name> ADD DATAFILE <datafile_name> SIZE
74.如何變動(dòng)數(shù)據(jù)文件的大???
ALTER DATABASE DATAFILE <datafile_name>RESIZE <new_size>;
75.哪個(gè)VMEW用來(lái)檢意數(shù)據(jù)文件的大?。?/h4>
DBA DATA FILES
76.哪個(gè)VIEW用來(lái)判斷tablespace的剩余空間
DBA FREE SPACE
77.如何判斷誰(shuí)往表里增加了一條紀(jì)錄?
auditing
78.如何重構(gòu)索引?
ALTER INDEX <index_name> REBUILD;
79.解釋什么是Partitioning(分區(qū))以及它的優(yōu)點(diǎn)。
Partition將大表和索引分割成更小,易于管理的分區(qū)。
80.你剛剛編譯了一個(gè) PL/SQL Package 但是有錯(cuò)誤報(bào)道,如何顯示出錯(cuò)信息?
SHOW ERRORS
81.如何搜集表的各種狀態(tài)數(shù)據(jù)?
ANALYZE
The ANALYZE command
82.如何啟動(dòng) SESSION 級(jí)別的 TRACE
DBA DATA FILES
DBA FREE SPACE
auditing
ALTER INDEX <index_name> REBUILD;
Partition將大表和索引分割成更小,易于管理的分區(qū)。
SHOW ERRORS
ANALYZE
The ANALYZE command
解答:
DBMS SESSION.SET_SQL_TRACE
ALTER SESSION SET SOL_TRACE = TRUE;
這兩個(gè) ORACLE 工具都是用來(lái)將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)的。
區(qū)別是:IMPORT 工具只能處理 由另一個(gè) ORACLE 工具 EXPORT 生成的數(shù)據(jù)。而 SQL*LOADER 可以導(dǎo)入不同的 ASCII 格式的數(shù)據(jù)源
83.用于網(wǎng)絡(luò)連接的 2 個(gè)文件?
TNSNAMES.ORA and SQLNET.ORA
84.解釋什么是 Oracle Forms ?
Oracle Forms 是用于創(chuàng)建與 Oracle 數(shù)據(jù)庫(kù)交互的軟件產(chǎn)品。它有一個(gè)lDE,包括一個(gè)屬性表,對(duì)象導(dǎo)航器和使用 PL/SQL 的代碼編輯器。
85.解釋 Oracle 表單服務(wù)組件包括什么?
Oracle表單包含:
客戶(hù)端:客戶(hù)端發(fā)送HTTP請(qǐng)求
窗口監(jiān)聽(tīng)器Servlet:它啟動(dòng),停止并與窗體運(yùn)行進(jìn)程通信表單運(yùn)行過(guò)程:它執(zhí)行特定表單應(yīng)用程序中包含的代碼
數(shù)據(jù)庫(kù):從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)
86.提及 11g 版本 2 中 Oracle Forms Services 中引入的新功能是什么?
在Oracle Form's Services中,包括的功能包括:與 Oracle Access Manager 集成 計(jì)劃表格運(yùn)行預(yù)備 增強(qiáng)的網(wǎng)絡(luò)統(tǒng)計(jì)報(bào)告 支持Unicode列 guiMode配置參數(shù) 表單指標(biāo)代理 支持圖像項(xiàng)目和圖標(biāo)按鈕中的URL Oracle 真正的用戶(hù)體驗(yàn)洞察
87.解釋CALL_FORM,NEW_FORM和OPEN_FORM之間有什么區(qū)別?
CALL FORM:它啟動(dòng)一個(gè)新窗體并傳遞控件 New FORM:它終止當(dāng)前窗體并用指定的新窗體替換它
OPEN FORM:打開(kāi)指定的新表單,而不更換或暫停父表單。
88.列出0 racle Forms配置文件?
Oracle Forms配置文件包括: 基本HTML文件(base.htm,basejini..htm,basejpi.htm baseie.htm) ENV CFG DEVLOBER
89.在Oracle Forms Report中,Record組列的最大長(zhǎng)度是多少?什么是不同類(lèi)型的記錄組?
記錄組列名的最大長(zhǎng)度不能超過(guò)30個(gè)字符。
不同類(lèi)型的記錄組包括:
查詢(xún)記錄組
狀態(tài)記錄組
非查詢(xún)記錄組
90.提示窗體中觸發(fā)的順序是什么?
表單打開(kāi)時(shí),觸發(fā)序列 預(yù)成型 預(yù)塊 預(yù)錄 前文項(xiàng) 實(shí)例 當(dāng)新形式的實(shí)例 當(dāng)新塊實(shí)例 當(dāng)新記錄實(shí)例 當(dāng)新項(xiàng)目實(shí)例
91.提到一個(gè)項(xiàng)目的“驗(yàn)證LOV”屬性?提到lov和list項(xiàng)目有什么區(qū)別?
當(dāng)驗(yàn)證的LOV設(shè)置為T(mén)rue時(shí),Oracle Forms將文本項(xiàng)的當(dāng)前值與LOV中顯示的第一列中的值進(jìn)行比較。LOV是列表項(xiàng)的屬性。列表項(xiàng)只能有一列,而lov可以有一個(gè)或多個(gè)列
92.說(shuō)明如何使用相同的LOV2列?
我們可以通過(guò)在全局值中傳遞返回值并使用代碼中的全局值,將相同的LOV用于2列。`
93.什么是綁定變量?
報(bào)表 6i 中使用了綁定變量來(lái)替換 select 語(yǔ)句中的單個(gè)參數(shù)。
94.說(shuō)明如何在指定的塊中迭代項(xiàng)目和記錄?
要遍歷指定塊中的項(xiàng)目和記錄可以使用NEXT_FIELD來(lái)迭代特定塊中的項(xiàng),并且NEXT RECORD遍歷塊中的記錄。
95.說(shuō)明你可以將FMX轉(zhuǎn)換或反向回到FMB文件嗎?
不,不可能將FMX轉(zhuǎn)換或反向回到FMB文件,以確保它們不會(huì)丟失。
96.可以從表單執(zhí)行動(dòng)態(tài)SQL嗎?
是的,可以通過(guò)使用內(nèi)置的FORMS_DDL或通過(guò)從表單調(diào)用DBNS_SQL數(shù)據(jù)庫(kù)包從表單執(zhí)行動(dòng)態(tài)SQL。
97.pctused and pctfree表示什么含義有什么作用?
pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中,pctfree控制數(shù)據(jù)塊中保留用于update的空間,當(dāng)數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時(shí),該數(shù)據(jù)塊從freelist中去掉當(dāng)塊由于dml操作free space大于pct used設(shè)置的空間時(shí),該數(shù)據(jù)庫(kù)塊將被添加在freelist鏈表中。
98.簡(jiǎn)單描述table/sment/extent/blok之間的關(guān)系?
table創(chuàng)建時(shí),默認(rèn)創(chuàng)建了一個(gè)data segment,每個(gè)datasegment含有minextents指定的extents數(shù),每個(gè)extent據(jù)據(jù)表空間的存儲(chǔ)參數(shù)分配一定數(shù)量的blocks
99.描述tablespace和datafile之間的關(guān)系
一個(gè)tablespace可以有個(gè)或多個(gè)datafile,每個(gè)datafile只能在一個(gè)tablespace內(nèi),table中的數(shù)據(jù),通過(guò)hash算法分布在tablespace中的各個(gè)datafile中,tablespace是邏輯上的概念,datafile則在物理上儲(chǔ)存了數(shù)據(jù)庫(kù)的種種對(duì)象。
100.本地管理表空間和字典管理表空間的特點(diǎn),ASSM有什么特點(diǎn)?
本地管理表空間(LocallyManaged Tablespace簡(jiǎn)稱(chēng)LMT),8i以后出現(xiàn)的一種新的表空間的管理模式,通過(guò)位圖來(lái)管理表空間的空間使用。字典管理表空間(Dictionary-ManagedTablespace簡(jiǎn)稱(chēng)DMT)8i以前包括以后都還可以使用的一種表空間管理模式,通過(guò)數(shù)據(jù)字典管理表空間的空間使用。動(dòng)段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM,鏈接列表freelist被位圖所取代,它是一個(gè)二進(jìn)制的數(shù)組,能夠迅速有效地管理存儲(chǔ)擴(kuò)展和剩余區(qū)塊(free block),因此能夠改善分段存儲(chǔ)本質(zhì),ASSM表空間上創(chuàng)建的段還有另外一個(gè)稱(chēng)呼叫Bitmap ManagedSegments(BMB 段)
101.回滾段的作用是什么
事務(wù)回滾:
當(dāng)事務(wù)修改表中數(shù)據(jù)的時(shí)候,該數(shù)據(jù)修改前的值(即前影像)會(huì)存放在回滾段中,當(dāng)用戶(hù)回滾事務(wù)(ROLLBACK)時(shí),ORACLE將會(huì)利用回滾段中的數(shù)據(jù)前影像來(lái)將修改的數(shù)據(jù)恢復(fù)到原來(lái)的值。
事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時(shí)候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次打開(kāi)數(shù)據(jù)庫(kù)時(shí)利用回滾來(lái)恢復(fù)未提交的數(shù)據(jù)。
1. **讀一致性:**當(dāng)一個(gè)會(huì)話(huà)正在修改數(shù)據(jù)時(shí),其他的會(huì)話(huà)將看不到該會(huì)話(huà)未提交的修改。
2. 一當(dāng)一個(gè)語(yǔ)句正在執(zhí)行時(shí)◇該語(yǔ)句將看不到從該語(yǔ)句開(kāi)始執(zhí)行后的未提交的修改(語(yǔ)句級(jí)讀一致性)。3. 當(dāng)ORACLE執(zhí)行Select語(yǔ)句時(shí),ORACLE依照當(dāng)前的系統(tǒng)改變號(hào)(SYSTECHANGE NUMBER-SCN)。
4. 來(lái)保證任何前于當(dāng)前SCN的未提交的改變不被該語(yǔ)句處理。可以想象:當(dāng)一個(gè)長(zhǎng)時(shí)間的查詢(xún)正在執(zhí)行時(shí)。5. 若其他會(huì)話(huà)改變了該查詢(xún)要查詢(xún)的某個(gè)數(shù)據(jù)塊,ORACLE將利用回滾段的數(shù)據(jù)前影像來(lái)構(gòu)造一個(gè)讀一致性視圖。
102.日志的作用是什么
記錄數(shù)據(jù)庫(kù)事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性
重做日志文件:含對(duì)數(shù)據(jù)庫(kù)所做的更改記錄,這樣萬(wàn)一出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù),一個(gè)數(shù)據(jù)庫(kù)至少需要兩個(gè)重做日志文件歸檔日志文件:是重做日志文件的脫機(jī)副本,這些副本可能對(duì)于從介質(zhì)失敗中進(jìn)行恢復(fù)很必要。
103.SGA主要有那些部分,主要作用是什么?
SGA:db_cache/shared_pool/large_pool/java_pooldb_cache: 數(shù)據(jù)庫(kù)緩存(BlockBuffer)對(duì)于Oracle數(shù)據(jù)庫(kù)的運(yùn)轉(zhuǎn)和性能起著非常關(guān)鍵的作用,它占據(jù)Oracle數(shù)據(jù)庫(kù)SGA(系統(tǒng)共享內(nèi)存區(qū))的主要部分。Oracle數(shù)據(jù)庫(kù)通過(guò)使用LRU算法,將最近訪(fǎng)問(wèn)的數(shù)據(jù)塊存放到緩存中,從而優(yōu)化對(duì)磁盤(pán)數(shù)據(jù)的訪(fǎng)問(wèn)。
shared pool:共享池的大小對(duì)于Oracle性能來(lái)說(shuō)都是很重要的。 共享池中保存數(shù)據(jù)字典高速緩沖和完全解析或編譯的的PL/SQL塊和SQL語(yǔ)句及控制結(jié)構(gòu)。
large_pool:使用MTS配置時(shí),因?yàn)橐赟GA中分配UGA來(lái)保持用戶(hù)的會(huì)話(huà),就是用Large_poor來(lái)保持這個(gè)會(huì)話(huà)內(nèi)存使用RMAN做備份的時(shí)候,要使用Large_pool這個(gè)內(nèi)存結(jié)構(gòu)來(lái)做磁盤(pán)/O緩存器。
java pool:為javaprocedure預(yù)備的內(nèi)存區(qū)域,如果沒(méi)有使用java_proc,,java_pool不是必須的。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-449748.html
104. oracle系統(tǒng)進(jìn)程主要有哪些,作用是什么
數(shù)據(jù)寫(xiě)進(jìn)程(dbwr):負(fù)責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存寫(xiě)入數(shù)據(jù)文件。
日志寫(xiě)進(jìn)程(lgwr):將重做日志緩沖區(qū)中的更改寫(xiě)入在線(xiàn)重做日志文件。1. 系統(tǒng)監(jiān)控(smon):檢查數(shù)據(jù)庫(kù)的一致性如有必要還會(huì)在數(shù)據(jù)庫(kù)打開(kāi)時(shí)啟動(dòng)數(shù)據(jù)庫(kù)的恢復(fù)。
2. 進(jìn)程監(jiān)控(pmon):負(fù)責(zé)在一個(gè) Oracle 進(jìn)程失敗時(shí)清理資源。3. 檢查點(diǎn)進(jìn)程(chpt):負(fù)責(zé)在每當(dāng)緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫(kù)中時(shí),更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫(kù)狀態(tài)信息。
4. 歸檔進(jìn)程(arcn):在每次日志切換時(shí)把已滿(mǎn)的日志組進(jìn)行備份或歸檔。5. 作業(yè)調(diào)度器(cjq):負(fù)責(zé)將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作。
6. 恢復(fù)進(jìn)程(reco):保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時(shí)commit,要么同時(shí)rollback。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-449748.html
如有哪里說(shuō)的不對(duì),書(shū)寫(xiě)有誤的話(huà),歡迎留言私信提出問(wèn)題,便于大家學(xué)習(xí)。
到了這里,關(guān)于Oracle數(shù)據(jù)庫(kù)面試題 精選 Oracle 面試題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!