面試題目集合 更新8/24

1.oracle rac 有多少類型的ip

一個scan-ip,n個pub-ip,n個pri-ip,n個vip


2.oracle datagrud底層傳送的是什麼,或者用什麼維繫主備之間的數據同步

傳輸的是redo日誌,同樣也是更具傳輸redo日記去區別三種模式。還有傳輸同步有兩種,同步傳輸和異步傳輸,同步傳的是redo日誌,異步傳輸的是歸檔日誌(系統默認)


3.DG三種模式

...............................

4.DG中Standby Redo Log的作用,面試的時候對方說英語的最好聽清楚,問清楚,什麼primary,Standby Redo我那時聽得一頭暮水

SRL只有在數據庫是standby角色是才起作用,在primary發生日誌切換時,Remote File System(RFS)進程把primary上的ORL寫到standby的SRL,同時standby歸檔上一個SRL,說白了就是主庫切換的時候把日誌傳輸成Standby Redo Log,然後在備庫上面再應用變成自己的redo


5.如何遠程判斷對方的oracle的端口是否正常

yum install nmap

nmap x.x.x.x -p1521


6.一條sql語句爲什麼不會走索引

sql語句走不走索引不是你設了索引就一定會走索引的,oracle裏面有他的判斷機制,一般返回記錄佔總記錄數的25%以上,就是走全表。打開alter session set sql_trace=true;查看查詢性能,如果只想走索引就只能強制select/*+ index(t t_idx) */  * from t ;但是一般情況下請相信oracle


7.大量數據更新的優化

Oracle優化:大量數據插入或更新


8.Hadoop有幾個角色

Hadoop分別從三個角度將主機劃分爲兩種角色。第一、最基本的劃分爲Master和Slave,即主人和奴隸;第二,從HDFS的角度,將主機劃分爲NameNode和DataNode(在分佈式文件系統中,目錄的管理很重要,管理目錄相當於主人,而NameNode就是目錄管理者);第三,從MapReduce的角度,將主機劃分JobTracker 和TaskTracker(一個job經常被劃分爲多個Task,從這個角度不難理解它們之間的關係)


9.索引的種類

Oracle中可以創建多種類型的索引,以適應各種表的特點和各種查詢條件的特點;可以按列的多少,索引列是否唯一、索引數據的組織形式對索引進行分類。
1.單列索引與複合索引
 一個索引可以由一個或多個列組成,用來創建索引的列被稱爲“索引列”。
 單列索引是基於單列所創建的索引,複合索引是基於兩列或者多列所創建的索引。
2.唯一索引與非唯一索引
 唯一索引是索引列值不能重複的索引,非唯一索引是索引列可以重複的索引。
 無論是唯一索引還是非唯一索引,索引列都允許取NULL值。默認情況下,Oracle創建的索引是不唯一索引。
3.B樹索引
 B樹索引是按B樹算法組織並存放索引數據的,所以B樹索引主要依賴其組織並存放索引數據的算法來實現快速檢索功能。
4.位圖索引
 位圖索引在多列查詢時,可以對兩個列上的位圖進行AND和OR操作,達到更好的查詢效果。
5.函數索引
 Oracle中不僅能夠直接對錶中的列創建索引,還可以對包含列的函數或表達式創建索引,這種索引稱爲“函數索引”。


10.standby redo log是必須要設置的嗎

不一定,但在下面三種情況備庫配置必須standby redo log:

  1)在最大保護和最大可用模式下
  2)在實時應用情況下
  3)配置級聯dataguard情況下

11.commint,alter system switch logfile,alter system checkpoint之間的區別
commit:針對的是dml操作,釋放鎖,數據提交到緩衝區,刪除保存點,還沒有寫data,只是寫了redo日誌,普通用戶可以執行。需要手動執行。
alter system checkpoint:將髒數據寫進磁盤,讓數據保持一致,永久性,如果硬盤出錯會出錯,system用戶,可以自動被執行:日誌切換,對數據文件進行熱備時(rman),當運行ALTER TABLESPACE/DATAFILE READ ONLY的時候,SHUTDOWN命令發出時。
alter systerm switch logfile:切換日記,如果切完會自動歸檔(開了歸檔日記前提),可有自動切:當前日記組被寫滿了就可以切。
alter system archive log current ; 對數據庫中的所有實例執行日誌切換(只歸檔當前日誌)。手工歸檔活動的日誌文件組。
alter system archive log all;手工歸檔所有的日誌文件組
--8/24--
2.髒塊
髒數據是相對於原數據而言的,是指被修改過的,與原數據不一樣的數據。

在oracle有SGA中,有個數據高速緩衝區(database buffer cache),由許多大小相等的緩存塊組成。這些塊根據使用情況不同,可分爲髒緩衝塊、空閒緩存塊和命中緩存塊三類:
1. 髒緩存塊(dirty buffers):它保存的是已經被修改過的數據。當一條SQL語句對某個緩存塊中的數據進行修改後,這個緩存塊就被標記爲髒緩存塊。
2. 空閒緩存塊(free buffers):不包含任何數據,它們等待後臺進程或服務器進程向其中寫入數據。當oracle從數據文件中讀取數據時,將會尋找空閒緩存塊,以便將數據寫入其中。
3. 命中緩存塊(pinned buffers):是那些正被使用,或者被顯式地聲明爲保留的緩存塊。這些緩存塊始終保留在數據高速緩衝區中,不會被換出。

3.LRU算法
LRU(Least recently used,最近最少使用)算法根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是“如果數據最近被訪問過,那麼將來被訪問的機率也更高”。

4.oracle表之間有幾種連接方式、各有什麼特點
嵌套鏈接,哈希鏈接,排序合拼鏈接
驅動表較小,有有效索引,對於被連接的數據子集較小的情況,嵌套循環連接是較好的選擇。在嵌套循環中,外表驅動內表,外表返回的每一行都要在內表中檢索找到它匹配的行,因此整個查詢返回的結果集不能太大(大於10000不合適),要把返回子集較小的表作爲外表(驅動表),而且在內表的連接字段上一定要有索引。
哈希連接是大數據集連接時常用的方式,優化器使用兩個表中較小的表,利用連接鍵在內存中建立散列表,然後掃描較大的表並探測散列表,找出與散列表匹配的行。
        這種方式適用於較小的表完全可以放入內存的情況,這樣成本就是訪問兩個表的成本之和。但是在表很大的情況下並不能完全放入內存,這時優化器將它分割成若干不同的分區,不能放入內存的部分就把該分區寫入磁盤的臨時段。io少但佔cpu
排序合併連接的兩個數據集可以並行處理,而嵌套循環和哈希連接不能.,佔io
5.什麼樣的表需要進行統計信息和收集、如何快速進行統計信息收集

優化器統計信息就是一個更加詳細描述數據庫和數據庫對象的集合,這些統計信息被用於查詢優化器,讓其爲每條SQL語句選擇最佳的執行計劃。優化器統計信息包括:· 表的統計信息:行數、 Block數、 行平均長度· 列的統計信息:列中不同值的數量、列中null的數量、數據分佈(柱狀圖/直方圖)· 索引的統計信息:葉子塊的數量、 索引的高度、 聚簇因子(clustering factor)· 系統的統計信息:I/O性能和利用、 CPU性能和利用
dbms_stats可以並行分析
dbms_stats有自動分析的功能(alter table monitor )
 
analyze 分析統計信息,不準確----some times

6.複合索引創建原則
複合索引的優點:
  改善選擇性:複合索引比單個字段的索引更具選擇性
  減少I/O:如果要查詢的字段剛好全部包含在複合索引的字段裏,則ORACLE只須訪問索引,無須訪問表
  什麼情況下優化器會用到複合索引呢?
  (a) 當SQL語句的WHERE子句中有用到複合索引的領導字段時,ORACLE優化器會考慮用到複合索引來訪問.
  (b) 當某幾個字段在SQL語句的WHERE子句中經常通過AND操作符聯合在一起使用作爲過濾謂詞,並且這幾個字段合在一起時選擇性比各自單個字段的選擇性要更好時,可
  能考慮用這幾個字段來建立複合索引.
  (c) 當有幾個查詢語句都是查詢同樣的幾個字段值時,則可以考慮在這幾個字段上建立複合索引.
  複合索引字段排序的原則:
  確保在WHERE子句中使用到的字段是複合索引的領導字段
  如果某個字段在WHERE子句中最頻繁使用,則在建立複合索引時,考慮把這個字段排在第一位(在CREATE INDEX語句中)
  如果所有的字段在WHERE子句中使用頻率相同,則將最具選擇性的字段排在最前面,將最不具選擇性的字段排在最後面
  如果所有的字段在WHERE子句中使用頻率相同,如果數據在物理上是按某一個字段排序的,則考慮將這個字段放在複合索引的第一位

7.介紹一下oracle鎖和latch
1,都是鎖

2,latch鎖比lock鎖級別低

3,lock用於database data,針對磁盤

4,latch用於管理系統資源,針對內存,shared pool latch.

5, library cache pin和library cache lock都是用於share pool的併發控制的。pin和lock都可以看作是一種鎖。locks/pins會在SQL語句執行期間一直保持,在結束的時候才釋放。

6,大體上可以這樣理解,現在要在一個房間裏面修一張桌子。
shared pool latch保護你正常找到一個可以修桌子的空房間,
library cache lock保護你可以正常把桌子搬進房間,
library cache pin保護你可以正常在房間裏把桌子修完。

7,latch:It's called 鎖存器, a register array for temporary keep the working status.oracle中文培訓教材上翻譯爲栓鎖,就是oracle的系統鎖,進程只有獲得latch纔可以向db buffer cache裏寫入數據.閂,以區別與鎖。閂是比鎖低一級,或者說是用於系統內部的小型鎖。latch是用於保證內存結構(如LRU List和Redo Allocation)在非常短的時間處在一致性的狀態,一般不需要DBA的維護!

8,lock是用於保證數據的一致性與更高的併發度的,包括TM表類型的lock和TX紀錄類型的lock。

Latch不存在死鎖,而Lock中存在。
select username from v$session; 

8.解釋ORA-01555
用戶user1對錶進行了更新操作,用戶user2在user1還沒有進行提交前讀表中數據,而且是大批量的讀取(打個比方:耗時3分鐘)而在這3分鐘內user1進行了提交操作,那又會產生什麼影響呢?這個時候怎麼保證讀寫一致性呢?這個時候DBMS就要保證有足夠大的undo表空間來存放修改前的數值,,以保證user2讀取的數據是修改前的一致數據.然後下次再讀取時候就是更新後的數據了.
ora-01555快照過舊就是因爲undo空間不夠大,其中一部分undo數據被覆蓋了,用戶無法獲得修改前的數據。
undo數據分爲三種:
活動的undo:未提交事務的undo數據,這些undo數據永遠不能覆蓋,用於回滾rollback事務。
過期的undo:已提交事務的undo數據,這些undo數據可以覆蓋。
未過期的undo:事務已提交,但事務提交前,有些查詢正在進行,它要讀取的是提交前的數據,這部分數據就是未過期數據。如果這部分undo數據被覆蓋了,就會發生ora-01555錯誤。

一個解決方法是,指定undo表空間參數UNDO_TABLESPACE,並將undo空間管理方法設置成自動擴展:UNDO_MANAGEMENT=AUTO
這種方法可能產生的結果是:
因爲undo表空間裝了太多未過期(unexpired)的undo數據,新的transaction無法向其中寫入undo數據,這時transaction就會發生ORA-30036錯誤。
優化分析表,縮短查詢時間,減小undo nologging
因爲undo表段是循環使用的,當表空間裏沒有可用的undo段時,就有可能覆蓋舊的undo段 。當會話訪問原undo 段。對應的undo數據找不到,就會報錯 ora-01555 快照太舊 。解決方法。把 undo數據文件放於 讀寫性能好的磁盤上。

9.如何查對象定義
 select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;

10.哪些命令會引起排序行爲,如何優化排序?
A、創建索引;    B、涉及到索引維護的並行插入    C、order by或者group by(儘可能對索引字段排序)    D、Distinct    E、union/intersect/minus    F、sort-merge join    G、analyze命令(僅可能使用estamate而不是compute)
合理設置Sort_area_size參數 儘量減少不必要的排序。 利用Statspack工具監控排序活動。添加索引避免排序
------------------------------------------------------------
1.表被刪除如何處理
FLASHBACK TABLE RECYCLETEST TO BEFORE DROP 閃回
expd/impd 數據
不完成恢復

2.Rac優缺點,規劃時注意事項
優:多機並行,高可用,隨時添加刪除節點(易用性),多機所以吞發高,低成本
缺:配置一樣,搭建複雜,
注意事項:時間一致,關掉selinux,防火牆,asm共享存儲

3.sql沒有走索引的原因
1.表太小了,不值得走 2.索引類型不對,應該用複合索引,位圖索引,函數索引 3.系統覺得全表更優表大,查詢量佔的比例也大 4 百分號,模糊搜索 先Analyze 一下

4.消耗最大的sql,awr主要指標,以往維護XXXX
1.從V$SQLAREA中查詢最佔用資源的查詢。 V$SQL是內存共享SQL區域中已經解析的SQL語句。
2.SQL> @?/rdbms/admin/awrsqrpi
• SQL with executions>1:執行次數大於1的sql比率,如果此值太小,說明需要在應用中更多使用綁定變量,避免過多SQL解析。
• Memory for SQL w/exec>1:執行次數大於1的SQL消耗內存的佔比。
• CPU Time(s): 爲SQL語句執行時CPU佔用時間總時長,此時間會小於等於Elapsed Time時間。單位時間爲秒。
Top 5 Timed Events 它指出了數據庫的sessions花費時間最多的等待事件,如下:
在瞭解系統架構前提下,對業務也比較熟悉最好。
關注系統負載 這個比較靠譜:DB Time/Elapsed與cpu個數的比較
關注系統負載load profile ,Redo ,logical read ,physical read,hard parse/parse 等有沒有異常
關注TOP EVENT 。有時候佔CPU最高的不一定是問題的源點,DB time排第一也不一定說系統沒問題,要結合現場,業務等具體分析。
命中率什麼的看着差不多就行了,100%最好,一般來說95%以下就可能有問題。
RAC響應時間一般不超過10MS
看看SQL部分,解析,DBtime,邏輯讀,物理讀。有沒有異常
在看看SGA,PGA夠不夠有沒有抖動,SHARED_POOL,BUFFER_CACHE分配的是否合理。
往細了說太多了。我也正在學習,請指正哈。

5.建庫需要考慮的問題
庫的名字是否重複,字符集,sid,是否開啓em,ORACLE_HOME和ORACLE_BASE目錄,手動建庫還是用dbca建庫(考慮:內存,圖形界面)

6.RAID0+1 RAID5認識,lv條帶化理解
 RAID 5可以理解爲是RAID 0和RAID 1的折中方案。RAID 5具有和RAID 0相近似的數據讀取速度RAID 5的磁盤空間利用率要比RAID 1,通過奇偶校驗信息去恢復被損壞的數據RAID5最少3快硬盤,做好了容量是(n-1)x單塊容量

RAID0+1是先做兩個RAID0,然後再做RAID1,因此RAID0+1允許壞多個盤,但只能在壞在同一個RAID0中,不允許兩個RAID0都有壞盤。
    RAID1+0是先做RAID1,然後再做RAID0,因此RAID1+0允許壞多個盤,只要不是一對磁盤壞就可以啦。

因此說RAID1+0比RAID0+1安全得多,因爲在同一對磁盤中,兩塊磁盤都壞掉的概率很低。
lv可以動態增加減去增容,把不連續的pv-》vg組合,不好本身很佔空間
同一RAIDLUNLVM裏再條帶只有壞處但不同RAID GROUPLUNLVM裏做條帶是可以提高性

6,。數據庫變緩慢怎麼處理
系統層-》應用層
先查cpu,i/o,內存
top sar free vmstat
找到使用資源特別大的Oracle的session及其執行的語句 
查找前十條性能差的sql語句 
索引,sga 死鎖,網絡速度慢 
察看數據庫的等待事件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章