Oracle面試題(找的好辛苦。。。)

1.對字符串操做的函數?
答:ASCII() –函數返回字符表達式最左端字符的ASCII 碼值
CHR() –函數用於將ASCII 碼轉換爲字符
–若是沒有輸入0 ~ 255 之間的ASCII 碼值CHR 函數會返回一個NULL 值
–應該是必須給chr()賦數字值
concat(str,str)鏈接兩個字符串
LOWER() –函數把字符串所有轉換爲小寫
UPPER() –函數把字符串所有轉換爲大寫
LTRIM() –函數把字符串頭部的空格去掉
RTRIM() –函數把字符串尾部的空格去掉
TRIM() –同時去掉全部兩端的空格
實際上LTRIM(),RTRIM(),TRIM()是將指定的字符從字符串中裁減掉
其中LTRIM(),RTRIM()的格式爲xxxx(被截字符串,要截掉的字符串),可是TRIM()的格式爲TRIM(要截掉的一個字符 from 被截的字符串)
SUBSTR() –函數返回部分字符串
INSTR(String,substring) –函數返回字符串中某個指定的子串出現的開始位置,若是不存在則返回0
REPLACE(原來的字符串,要被替換掉的字符串,要替換成的字符串)
SOUNDEX() –函數返回一個四位字符碼
–SOUNDEX函數可用來查找聲音類似的字符串但SOUNDEX函數對數字和漢字均只返回NULL 值

二、事務概念
答案:事務是這樣一種機制,它確保多個SQL語句被看成單個工做單元來處理。事務具備如下的做用:
* 一致性:同時進行的查詢和更新彼此不會發生衝突,其餘用戶不會看到發生了變化但還沒有提交的數據。
* 可恢復性:一旦系統故障,數據庫會自動地徹底恢復未完成的事務。
三、oracle中查詢系統時間
答:select sysdate from dual
四、觸發器的做用,何時用觸發器,建立觸發器的步驟,觸發器裏是否能夠有commit, 爲何?
答案:觸發器是能夠由事件來啓動運行的,存在於數據庫服務器中的一個過程。
他的做用:能夠實現通常的約束沒法完成的複雜約束,從而實現更爲複雜的完整性要求。
使用觸發器並不存在嚴格的限定,只要用戶想在無人工參與的狀況下完成通常的定義約束不能夠完成的約束,來保證數據庫完整性,那麼就可使用觸發器。
因爲觸發器主要是用來保證數據庫的完整性的,因此要建立一個觸發器,首先要明確該觸發器應該屬於那一種(DML,INSTEAD OF,SYSTEM)由於他們各有個的用途;其次就是要肯定觸發器被觸發之後所設計到的數據。
出發器中不可使用COMMIT。
5.數字函數
abs() 絕對值exp(value)e的value次冪ceil()大於等於該值的最小整數floor()小於等於該值的最大整數 trunc(value,precision)保留precision個小數截取valueround(value,precision)保留 precision個小數對value進行四捨五入 sign()根據值爲正負零返回1,-1,0mod()取模操做power(value,exponent)value的exponent次冪 sqrt()求平方根
1.初級
四、關係數據庫系統與文件數據庫系統的區別在那裏?關係數據庫系統通常適用那些方面?
答案:
關係數據庫系統文件系統的區別在於:
首先,關係性數據庫的總體數據是結構化的,採用關係數據模型來描述,這是它與文件系統的根本區別。(數據模型包括:數據結構,數據操做以及完整性約束條件)
其次,關係數據庫系統的共享性高,冗餘低能夠面向整個系統,而文件系統則具備應用範圍的侷限性,不易擴展。
第 三,關係數據庫系統採用兩級映射機制保證了數據的高獨立性,從而使得程序的編寫和數據都存在很高的獨立性。這方面是文件系統沒法達到的,它只能針對於某一 個具體的應用。(兩級映射:保證邏輯獨立性的外模式/模式映射和保證物理獨立性的內模式/模式映射。外模式:用戶模式,是數據庫用戶的局部數據的邏輯結構 特徵的描述。模式:數據庫全體數據的邏輯結構特徵的描述。內模式:也就是數據最終的物理存儲結構的描述。)
第四,就是關係性數據庫系統由統一的DBMS進行管理,從而爲數據提供瞭如安全性保護,併發控制,完整性檢查和數據庫恢復服務。

五、觸發器的概念,存儲過程的概念.
答案:
觸發器: 是存儲在數據庫中的過程,當表被修改(增、刪、改)時它隱式地被激發。
存儲過程:是數據庫語言SQL的集合,一樣也存儲在數據庫中,可是他是由其餘應用程序來啓動運行或者也能夠直接運行。
六、基本SQL語句有哪些.
答案:
select、insert、update、delete、create、drop、truncate
1.中級
八、什麼是事務一致性 ? 選擇熟悉的數據庫實現一個事務處理,如信用卡提款.
答案:
事務的一致性:是事務原子性的體現,事務所對應的數據庫操做要麼成功要麼失敗沒有第三種狀況。事務無論是提交成功與否都不能影響數據庫數據的一致性狀態。
事務:用戶定義的一個數據庫操做序列,這些操做要麼所有成功完成要麼所有不作,是一個不可分割的總體。定義事務的SQL語句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。
事務的原子性:就是事務所包含的數據庫操做要麼都作,要麼都不作.
事務的隔離性:事務對數據的操做不可以受到其餘事務的影響。
事務的持續性:也就是說事務對數據的影響是永久的。
對’信用卡提款’這一事務而言就是要保證’提取到現金’和’卡賬號餘額’的修改要同時成功或失敗.
BEGIN TRANSACTION
讀取A的賬戶餘額BALANCE;
BALANCE=BALANCE-AMOUNT轉賬金額;
IF(BALANCE<0) THEN
ROLLBACK;
ELSE
BEGIN
將A的新餘額寫回;
讀取B的賬戶餘額BALANCEB;
BALANCEB=BALANCEB+AMOUNT轉賬金額;
將B的新餘額寫回;
COMMIT;
END IF;
END;

九、實際編寫和調試存儲過程或觸發器.
答案:
十、實現索引的方式? 索引的原理? 索引的代價? 索引的類型?
答案: 實現索引的方式有兩種:針對一張表的某些字段建立具體的索引,如對oracle: create index 索引名稱 on 表名(字段名);在建立表時爲字段創建主鍵約束或者惟一約束,系統將自動爲其創建索引。
索引的原理:根據創建索引的字段創建索引表,存放字段值以及對應記錄的物理地址,從而在搜索的時候根據字段值搜索索引表的到物理地址直接訪問記錄。
引入索引雖然提升了查詢速度,但自己佔用必定的系統存儲容量和系統處理時間,須要根據實際狀況進行具體的分析.
索引的類型有:B樹索引,位圖索引,函數索引等。
十一、view 的概念 ? 什麼時候應用?
答案: view 是對錶級數據的多角度的透視,適用於對查詢安全性、靈活性有必定要求的環境
十二、sql語句例外處理?舉例說明?
答案: 當sql 語句在執行過程當中出現意外時,如查詢時,未查詢到結果;更改時無記錄等狀況的應採起的措施.
以oracle爲例:測試其對exception的理解.如
select 字段 into 變量 from table ;
若查詢出多條記錄,應增長exception 例外處理.
Oracle處理異常有三種:
1.預約義的例外處理,EXCEPTION WHEN exception_name THEN
2.EXCEPTION_INIT產生例外
首先要declare 聲明一個例外名;而後將例外名和錯誤代碼綁定pragma exception_init(錯誤名,錯誤代碼);最後在EXCEPTION 處when 錯誤名then
3.用戶自定義例外,不用EXCEPTION,當判斷條件成熟時用raise_application_error(-20000~~~-20999,提示信息)。
1三、判斷下列論述是否正確。 (1) 一個事務中的某條SQL命令提交時,其它SQL命令能夠不提交。 (2) 在一個關係表中,主鍵可惟一標識一行記錄。 (3) 一個關係表中的外鍵一定是另外一表中的主鍵。 (4) 回滾能夠在事務失敗時,回到操做事務前的數據狀態。
答案: (1)錯誤 (2)正確 (3)正確 (4)正確
1四、如下哪些手段可保證數據庫中數據的完整性和一致性: (1)自定義數據類型 (2)觸發器 (3)主鍵和外鍵 (4)事務
答案: (1)(2)(3)(4) (爲何有1)
1五、使用存儲過程訪問數據庫比直接用SQL語句訪問有哪些優勢?
答案:存儲過程是預編譯過的,執行時勿須編譯,執行速度更快;存儲過程封裝了一批SQL語句,便於維護數據的完整性與一致性;能夠實現代碼的複用。
1.高級
1六、對於精通的數據庫系統描述其體系結構,主要包括存儲機制、回滾機制、運行機制等.
答案:對oracle 系統而言,描述sga的結構; 後臺pmon,ckpt、lgwr,smon等進程的功能;表空間的分配策略; 回滾段的結構
oracle 的sga(系統全局區)包括的主要區有:數據庫緩存區,重作日誌緩存區,共享池(數據字典緩存和庫緩存),大池等。數據庫緩存區用來存放最近使用過的數據 塊主要和後臺進程中的數據庫寫進程(DBWR)以及數據文件發生關係;重作日誌緩存區用於存放操做數據庫數據所產生的重作日誌信息,與之合做的有重作日誌 寫進程(LGWR)和重作日誌文件;共享池主要緩存SQL/PLSQL,資源鎖,控制信息等,其中的庫緩存主要緩存被解析執行過的SQL/PLSQL庫緩 存可分爲共享SQL和私有SQL兩個區,共享SQL用於存放SQL語句的語法分析結果和執行計劃,私有SQL則用來存放與具體SQL語句執行有關的綁定變 量,會話參數等。
ORACLE實例的另一個重要部分就是其後臺進程,主要的後臺進程有:數據庫寫進程(DBWR),重作日誌寫進程 (LGWR),系統監視器(SMON),進程監視器(PMON),檢查點進程(CKPT)。DBWR主要是對數據庫緩存區中的髒冷數據進行寫入數據文件操 做;LGWR主要是將對數據庫數據操做所產生的重作日誌信息寫入到重作日誌文件中;SMON完成因爲非正常關閉數據庫的狀況下重起數據庫時對數據庫的恢 復;PMON用來恢復失敗的用戶進程和服務進程,並釋放其所佔的系統資源;CKPT能夠表示數據庫在此出處於完整狀態。
邏輯存儲結構:數據塊BLOCK,區EXTENT,段SEGMENT,表空間TABLESPACE
物理存儲空間:表空間,數據文件,控制文件,日誌文件,數據字典
軟件體系結構就是上邊對SGA和後臺進程的描述。
1七、對於精通的數據庫系統描述其數據一致性的保證機制,包括lock,事務一致性等.
答案: 在併發環境下,採用多種機制保持其數據的一致性,如oracle系統提供的事務級的一致性、行級鎖、表級鎖等等.
1八、對精通的數據庫系統描述其聯機備份機制、恢復機制,考覈其對日誌的理解.
答案: 描述相關數據庫的實時聯機備份策略,如數據庫系統在運行中經過何種方式保證其數據的實時備份, 出現問題時,應採起何種辦法從聯機備份進行恢復.
對對oracle而言,其archive online 備份方式應如何設置、修改什麼參數、如何安排備份空間等等.
1九、精通的數據庫系統描述性能優化方法,包括優化的策略、參數、驗證方法等.
答案:
20、 Truncate; 與 delete;的區別?(這道題能夠衍生出不少的問題好比:想快速的清除一個很大的表中的數據應該用設麼操做?答案是:應該用truncate。還有,在 對兩個相同紀錄數的分別表使用了truncate,和delete commit;後對這兩個表進行count(*)統計記錄數操做,那個錶速度會快些?答案是:使用了truncate的會快些。)
2一、寫一個‘遊標’並使用它。(這道題應該注意的是:在使用遊標後必定要記得關閉遊標)。
Declare
Cursor cursor_name is
Select * from tablename;
Begin
Open cursor_name;
Loop
Fetch cursor_name into bianliang;
Exit when cursor_name%notfound;
Sql……..
End loop;
Close cursor_name;
End;
2二、在建立表的時候會設置
pctfree 10
pctused 40
而建立表的索引的時候卻沒有
pctused 40
這是爲何?
(這道題的主要思想是索引不能在pctused 40上獲得什麼好處)
2三、使用過的最大的表有多少行紀錄?(這道題不是看應試者的技術過不過關,而是考察應試者是否有大型數據庫的管理操做經驗)
不要對錶的索引列進行函數操做,由於這樣系統就不能使用索引,使查詢變得很慢,可是在ora8i之後就已經開始支持函數的索引,彌補了這個不足。

2四、ORACLE數據庫啓動與關閉的步驟
啓動:啓動實例—-加載數據庫數據—–打開數據庫
關閉:關閉數據庫—-卸載數據庫數據—-關閉實例
2五、Delete與truncate的區別
delete通常用於刪除少許記錄的操做,並且它是要使用回滾段而且要進行顯示的提交事務。而truncate則使用於大量刪除數據,並且隱式提交事務,其速度要比使用delete快的多。
2六、DDL和DML分別表明什麼??
DDL表示數據定義語言,在ORACLE中主要包括CREATE,ALTER,DROP
DML表示數據操做語言,主要的DML有SELECT,INSERT,UPDATE,DELETE
2八、Javascript中動態效果時調用的函數。
2九、數據庫中有若干條相同的記錄,刪除到只剩下一條記錄。如何作,請用SQL語句經過ROW_ID來寫出執行過程。
Delete table_name where ziduan=’’ and rowed<(select max(rowed) from table_name where ziduan=’’);
30、oracle數據庫表存放到磁盤什麼地方(什麼物理空間上——大概意思)?
Oracle數據庫表存放在數據文件上。
3一、Oracle使用什麼語句給用戶分配權限?
GRANT TO 語句
3二、你在項目現場,用戶要求你向正在運行的表中添加一個字段,你該怎麼作?
第一種方法:關閉數據庫,而後使用受限模式打開,由sys/sysdba來進行
第 二種方法:不關閉數據庫,將數據庫置於靜默狀態在SYS/SYSDBA模式下用ALTER SYSTEM QUISCE RESTRICTED,這種狀態下只有SYS/SYSDBA才能夠對數據庫進行操做,修改完畢以後再退出靜默狀態ALTER SYSTEM UNQUISCE
在這裏複習到了數據庫的兩種特殊狀態:靜默狀態(QUISCE)和掛起狀態
靜默狀態就是隻有特殊權限的 SYS/SYSDBA才能夠對數據庫進行操做,使用ALTER SYSTEM QUISCE RESTRICTED之後系統將等候活動着的會話主動結束,同時阻止創建新的會話,系統掛起全部的SQL語句,等恢復之後再從新激活會話執行掛起的 SQL。
掛起狀態就是系統將數據庫全部對物理文件(數據文件,控制文件,日誌文件)的I/O操做都暫停,可是並不由止非DBA用戶對數據庫進行操做。這種狀態主要用於進行數據庫備份。

3三、Oracle中回滾的概念?回滾段有什麼做用。
回滾就是在事務提交以前將數據庫數據恢復到事務修改以前數據庫數據狀態。
回 滾段就是爲回滾提供依據,記錄的是事務操做數據庫以前的數據或者對應於之前操做的操做,這個內容要根據之前的操做而定。好比說之前事務操做若是是 UPDATE那麼回滾段則存儲UPDATE之前的數據,若是事務是DELETE操做那麼存儲的則是與之相對應的INSERT操做語句,相反若是事務操做是 INSERT那麼記錄相應的則是DELETE操做了。
3四、Oracle的8I和9I有什麼區別
3五、一張表有10萬條記錄,如何刪除其中的任意20條記錄?請用SQL語句進行操做
3六、客戶端如何訪問服務器端的oracle?若是客戶端沒法訪問服務器端的oralce,可能會是什麼緣由?
客 戶端經過網絡或者進程方式以合法的用戶身份來取得和服務器端ORACLE的鏈接。若是客戶端沒法訪問服務器端ORACLE可能出現的緣由是:用戶無權訪 問;服務器端數據庫並無打開(啓動數據庫的第三步沒有完成);若是服務器是在共享模式下的則有可能沒有對應於該客戶所使用的通訊協議的調度進程 Dnnn。
3七、oracle中執行語句錯誤時去哪裏查找錯誤信息?
Select * from USER_ERRORS
3八、select語句須要提交嗎?insert和update語句呢?
3九、在執行insert語句並提交後,這些提交的數據存儲到什麼地方??
被存儲到數據文件中
40、oracle中有哪些類型的文件?
數據文件,控制文件,日誌文件和數據字典
4一、介紹一下oracle的體系結構?
邏輯體系結構:塊,區,段,表空間
物理體系結構:表空間,三大文件
軟件體系結構:SGA,後臺進程
4二、談談對oracle的row_ id是否理解?請簡述?
ORACLE的row_id是一個僞列,其個是爲18個字節可將這18個字節用6363來劃分,分別表示段編號,數據文件編號,數據塊編號和記錄編號。
Row_id表示的是一個記錄的物理存儲地址。
4三、oracle中如何刪除用戶?
Oracle中使用DROP USER來刪除用戶,若是使用DROP USER CASCADE那麼用戶的對象也同時被刪除掉。爲了達到刪除用戶的效果而又不影響對用戶下的對象的使用可使用alter user username account lock將用戶鎖定。
4四、客戶端對服務器端的oralce操做的流程是什麼?
專 用模式下:用戶經過應用程序進程試圖去獲得一個與ORACLE數據庫服務器的鏈接客戶端經過網絡傳遞鏈接請求,ORACLE服務器則使用監聽進程監聽用 戶請求,而且來驗證用戶身份,經過驗證則爲用戶分配一專用服務進程用戶提交SQL語句專用服務進程則首先在SGA區的共享池中檢查是否有與該SQL語 句類似的已經被解析執行而且緩存的SQL語句,若是有則採用它的解析結果和執行計劃執行SQL語句,若是沒有則對SQL語句進行語法解析生成執行計劃通 過解析則執行操做獲取數據將執行結果返回給客戶。
共享模式下:與專用模式不一樣在於當監聽程序驗證用戶的合法性之後並不爲它分配一個專用的服務進 程,而是將該請求與響應的調度進程相聯繫起來,並將起放入到一個請求隊列中,最終由響應的Dnnn來從調度隊列中獲取一個請求併爲之分配一個空閒的服務進 程,接下來有服務進程對該請求進行服務操做和專用方式下相同,處理完成以後由服務進程先將結果放入一個返回隊列最後再由調度進程(Dnnn)將返回隊列中 的結果返回給對應的用戶。
4五、exits和in在ORALCE數據庫中那個執行效率更高?
Exits執行效率比in高。由於:
4六、如何判斷遊標已經到最後一行?
Cursor_name%notfound
4七、聚簇索引和普通索引在不一樣的SQL語句中哪一個效率更高??(筆試題,原題回憶不起來,主題就是聚簇索引和普通索引的區別)
概念類:
聚合函數? Session的定義和用法? Oracle的存儲過程 ? 什麼是構造函數?

4八、簡述ORACLE中SGA的組成部分。
答:系統全局區包括:共享池、重作日誌緩存區、數據高速緩存區,大池,JAVA池。
4九、簡述ORACLE的啓動和關閉各有多少步驟?
啓動:啓動實例、裝載數據庫數據、打開數據庫。
關閉:關閉數據庫、卸載數據庫數據、關閉實例。
50、在Oracle表空間的分類和做用,如排序時數據將放在什麼表空間?
做用是爲了突破存儲容量的限制,是一個邏輯概念。排序數據放在臨時表空間。
5一、執行COMMIT命令時,數據庫將會發生什麼改變,ROLLBACK呢?
答:commit 提交時首先是與事務對應的重作日誌信息將被寫入到數據庫物理文件中的重作日誌文件中,至因而否會真正將事務操做的內容反映到數據文件還好看DBWR是否啓 動了。在完成數據庫的插入,刪除和修改操做時,只有當事務提交到數據庫纔算完成,有提交前只有操做數據庫的本人才能看到,別人只有在最後提交完成才能夠看 到。
ROLLBACK回滾當前還沒有提交的事務,使數據庫恢復到事務操做前的狀態。
5二、用命令建立用戶,併爲用戶受權。
Create user user_name
identified by password /
identified externally/
identified blobally as ‘CN=user’
default tablespace tablespace_name
temporary tablespace tablespace_name;
grant role/privilege to user_name;

5三、寫一個存儲過程,使employee(name,age,emp_no,salary)表中的salary值在0-1000之間的員工的工資上漲20%,(提示:要求用到遊標)
Cteate or replace procedure emp_sal
V_name employee.name%type;
V_emp_no employee.emp_no%type;
V_salary employee.salary%type;
Cursor cursor_sal is
Select name,emp_no,salary from employee where salary between 0 and 1000;
Begin
Open cursor_sal;
Loop
Fetch cursor_sal into v_name,v_emp_no,v_salary;
Exit when cursor_sal%notfound;
Update employee set salary=salary*1.2 where name=v_name and emp_no=v_emp_no;
End loop;
Close cursor_sal;
Commit;
End;
5四、ORACLE數據庫都有哪些類型的文件?
數據文件,控制文件,日誌文件,參數文件
5五、用命令建立表空間、用戶,併爲用戶受權、收回權限。
Create tablespace tabllespacename
Datafile ‘f:\orcl\user001.dbf size 20m
Default storage(
Initial 512k
Next 512k
minextents 2
pctincrease 50%
maxExitnts 2048)
minimum extent 512k
logging
online
permanent
extent management dictionary;
回收權限: revoke privilege from user;
create tablespace tablespace_name
datafile ‘’
default storage(
initial xxxkb
next yykb
minextents 2
pctincrease nnnn
maxextents mmm)
logging
online
extent management dictionary/local[autoallocate/uniform size xxxmb];
create user user_name
identified by passwore/
identified externally/
identified globally as ‘CN=user’
default tablespace tablespace_name
temporary tablespace tablespace_name
[account lock /unlock]
grant connect to user_name;
grant create table to suer_name;
grant update on table_name to user_name;
revoke create table from user_name;
revoke update on table_name from user_name;
5六、在Oracle中如何更改用戶名?
5七、如何在Oracle中查詢某個用戶下全部已建的表?
答:select * from cat;
5七、執行TRUNCATE命令後,存儲空間是否還存在,是否可被其餘的表佔用?
執行TRUNCATE以後,爲表分配的區空間將被回收HWM將回退,若是在使用TRUNCATE的時候沒有指定REUSE STORAGE那麼執行操做後僅僅留下由MINEXTENTS所指定的區不然表的全部空間將被回收用於再分配。
5九、何在Oracle中查看當前用戶,一般有哪些方式?(提示:show user和select * from user_users)show user;/select username from user_users;
60、出在Oracle中,建立表空間的語法結構,以及所含參數說明。
Create tablespace tablespacename
Datafile ‘’
Logging/nologging
Default storage(initial kb
Next kb
Minextents x
Maxextents y
Pctincrease z
)
online/not online
extent management dictionary/local[autoallocate/uniform size kb];
6一、如何判斷遊標是否到了末尾?(提示:用%notfound)
cursor_name%notfound
6二、在Oracle中,如何查看當前用戶下的全部表空間?
Select tablespace_name from user_tablespaces;
6三、在Oracle中,你所建立的表空間信息放在哪裏?
存放在數據字典中,數據字典內容對應於系統表空間SYSTEM表空間。
6四、ORACLE中的控制文件何時讀取?
ORACLE服務器啓動時,先啓動實例而後再讀取數據庫的各個文件固然也包括控制文件。也就是說在數據庫服務器啓動的第二步時讀取。
6五、Oracle的表格信息存儲在哪一個地方?
SYSTEM表空間的數據字典文件中。
6六、如何根據字典建立一個表空間,並說明參數?
6六、ORACLE中當一個用戶正在操做一個執行過程,管理員此時取消了他的權限,會發生什麼事情?

6八、談談你對角色的理解,經常使用的角色有哪些?
角色就是一組權限的數據庫實體,它不屬於任何模式或用戶可是能夠被授予任何用戶。經常使用的角色有CONNECT,DBA,RESOURCE,SELECT_CATALOG_ROLE(查詢全部表視圖權),DELETE_CATALOG_ROLE(刪除權限)等。
角色的建立和受權:和建立用戶爲用戶受權差很少。Create role role_name identified …
grant 權限to role_name。
6九、簡述Oracle的歸檔與不歸檔工做模式,分別說明。
Oracle 歸檔模式是指在建立數據庫時指定了ARCHIVELOG參數,這種模式下,當重作日誌文件寫滿的時候會將該重作日誌文件的內容保存到指定的位置(由初始化 文件中的參數ARCHIVE_LOG_DEST_n來決定)。並非數據庫在歸檔模式下工做的時候就能夠自動完成歸檔操做,在歸檔模式下能夠有兩種歸檔方 式:自動歸檔(在初始化文件中的參數ARCHIVE_LOG_START被設置爲TRUE)和手動歸檔。若是歸檔模式下沒有啓動自動歸檔的話,並且又沒有 實行手動歸檔那麼當LGWR進程將重作日誌信息寫入已經寫滿的重作日誌文件時數據庫將會被掛起直到進行了歸檔。可見歸檔是對重作日誌文件信息的一種保護措 施。
Oracle非歸檔模式下當重作日誌文件寫滿之後如果有LGWR進行重作日誌信息的寫入操做時,之前保存在重作日誌文件中的重作日誌信息就會被覆蓋掉。
70、Oracle索引分爲哪幾類,說出惟一索引和位圖索引的概念。
Oracle索引有B樹索引,位圖索引,函數索引,簇索引等。
惟一索引也是B樹索引的一種,它要求被索引的字段值不能夠重複。在建立的時候使用B樹算法建立。
位圖索引並非採用象惟一索引那樣存儲(索引字段值,記錄ROWID)來建立索引段的,而是爲每個惟一的字段值建立一個位圖,位圖中使用位元來對應一個記錄的ROWID。位元到ROWID是經過映射的到的。
7一、ORACLE的基本數據類型有哪些?
Char()存儲定長字符,定義的時候能夠不爲他指定長度可是如若往裏插入值則會出錯;varchar2()存儲變長字符定義的時候必須指定長度,date存儲時間日期;Number()數字類型,包括整型,浮點型等;clob()大容量字符串;blob()大二進制對象
7二、SQL中,執行四捨五入的是哪一個函數?
Round(value,保留的小數位數)與只對應的還有一個特別類似的函數trunc(value,保留的小數位數)它的做用是根據要保留的小數位數來截取原數。
7三、oracle數據庫表存放到磁盤什麼地方?數據文件
ORACLE數據庫的表存放在物理文件中的數據文件中。
7四、當執行insert語句並提交後,這些提交的數據存儲到什麼地方??
存儲到了數據庫的數據文件中。
7五、Exits和in在ORALCE數據庫中那個執行效率更高?
EXITS執行效率要比使用IN要快。
7六、ORACLE本身提供的函數,想知道具體位置,如何操做?
7七、數據庫的幾種物理文件?
1)數據文件 2)控制文件 3)日誌文件
7八、控制文件都含有哪些信息?
控 制文件存放有實例信息(實例名稱建立時間等),數據文件和日誌文件信息,還有系統運行時記錄的系統變動碼(SCN),檢查點信息和歸檔的當前狀態信息等。 數據庫在加載數據庫的時候首先要讀取控制文件得到和數據庫有關的物理結構信息以後纔可以正確加載數據文件和日誌文件並打開數據庫。
7九、Decode函數的用法?
DECODE 的語法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示若是value等於if1 時,DECODE函數的結果返回then1,…,若是不等於任何一個if值,則返回else。初看一下,DECODE 只能作等於測試,但剛纔也看到了,咱們經過一些函數或計算替代value,是可使DECODE函數具有大於、小於或等於功能。
2.如何用decode進行大於小於的比較?
利用sign()函數和DECODE和在一塊兒用
select decode(sign(變量1-變量2),-1,變量1,變量2) from dual;

decode(條件,值1,翻譯值1,值2,翻譯值2,…值n,翻譯值n,缺省值)
該函數的含義以下:
IF 條件=值1 THEN
RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
……
ELSIF 條件=值n THEN
RETURN(翻譯值n)

ELSE
RETURN(缺省值)
END IF
• 使用方法:
一、比較大小
select decode(sign(變量1-變量2),-1,變量1,變量2) from dual; –取較小值
sign()函數根據某個值是0、正數仍是負數,分別返回0、一、-1

例如:
變量1=10,變量2=20
則sign(變量1-變量2)返回-1,decode解碼結果爲「變量1」,達到了取較小值的目的。

二、表、視圖結構轉化
現有一個商品銷售表sale,表結構爲:
month char(6) –月份
sell number(10,2) –月銷售金額

現有數據爲:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300

想要轉化爲如下結構的數據:
year char(4) –年份
month1 number(10,2) –1月銷售金額
month2 number(10,2) –2月銷售金額
month3 number(10,2) –3月銷售金額
month4 number(10,2) –4月銷售金額
month5 number(10,2) –5月銷售金額
month6 number(10,2) –6月銷售金額
month7 number(10,2) –7月銷售金額
month8 number(10,2) –8月銷售金額
month9 number(10,2) –9月銷售金額
month10 number(10,2) –10月銷售金額
month11 number(10,2) –11月銷售金額
month12 number(10,2) –12月銷售金額

結構轉化的SQL語句爲:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),’01′,sell,0)),
sum(decode(substrb(month,5,2),’02′,sell,0)),
sum(decode(substrb(month,5,2),’03′,sell,0)),
sum(decode(substrb(month,5,2),’04′,sell,0)),
sum(decode(substrb(month,5,2),’05′,sell,0)),
sum(decode(substrb(month,5,2),’06′,sell,0)),
sum(decode(substrb(month,5,2),’07′,sell,0)),
sum(decode(substrb(month,5,2),’08′,sell,0)),
sum(decode(substrb(month,5,2),’09′,sell,0)),
sum(decode(substrb(month,5,2),’10′,sell,0)),
sum(decode(substrb(month,5,2),’11′,sell,0)),
sum(decode(substrb(month,5,2),’12′,sell,0))
from sale
group by substrb(month,1,4);

7九、CASE語句的用法?
Oracle用法很簡單:
SELECT last_name, job_id, salary
CASE job_id
WHEN ‘IT_PROG’ THEN 1.10*salary
WHEN ‘ST_CLERK’ THEN 1.15*salary
WHEN ‘SA_REP’ THEN 1.20*salary
ELSE salary END 「REVISED_SALARY」
FROM employees

80、truncate和delete的區別?
一、TRUNCATE在各類表上不管是大的仍是小的都很是快。若是有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。
二、TRUNCATE是一個DDL語言而DELETE是DML語句,向其餘全部的DDL語言同樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
三、TRUNCATE將從新設置高水平線和全部的索引。在對整個表和索引進行徹底瀏覽時,通過TRUNCATE操做後的表比DELETE操做後的表要快得多。
四、TRUNCATE不能觸發觸發器,DELETE會觸發觸發器。
五、不能授予任何人清空他人的表的權限。
六、當表被清空後表和表的索引講從新設置成初始大小,而delete則不能。
七、不能清空父表。
8一、表空間如何擴展?並用語句寫出?
兩種擴展方式:
a)增長數據文件
alter tablespace tablespace_name add datafile ‘’ xxMB
b)擴展數據文件大小
alter database datafile ‘’ resize newMB
8二、表空間區管理方式?哪一種方式如今是推薦使用的?
a)字典管理方式
extent management dictionary;默認方式
b)本地管理方式
extent management local[autoallocate/uniform xxmb];
8三、用什麼函數得到日期?和日期中的月,日,年
to_char(sysdate,’year’):tow thsound six to_char(sysdate,’yyyy’) :2006
to_char(sysdate,’month’):8月to_char(sysdate,’mm’):08
to_char(sysdate,’day’):星期4 to_char(sysdate,’dd’):22
8四、分區表的應用?

a)一個分區表有一個或多個分區,每一個分區經過使用範圍分區、散列分區、或組合分區分區的行
b)分區表中的每個分區爲一個段,可各自位於不一樣的表空間中
c)對於同時可以使用幾個進程進行查詢或操做的大型表分區很是有用

8五、談談索引的用法及原理?
索引是若干數據行的關鍵字的列表,查詢數據時,經過索引中的關鍵字能夠快速定位到要訪問的記錄所在的數據塊,從而大大減小讀取數據塊的I/O次數,所以能夠顯著提升性能。
8六、存儲過程的應用,如何既有輸入又有輸出?
Create procedure pro_name
(xxxx in/out type;
yyyy in/out/inout type;
) is/as
zzzz type;
begin
sqlpro;
exception
exceptionxxxxx;
commit;
end;
8七、常發生的異常有哪些?
經常使用預約義例外
CURSOR_ALREADY_OPEN — ORA-06511 SQLCODE = -6511 遊標已經打開
DUP_VAL_ON_INDEX — ORA-00001 SQLCODE = -1 違反惟一性約束
INVALID_CURSOR — ORA-01001 SQLCODE = -1001 非法遊標操做
INVALID_NUMBER — ORA-01722 SQLCODE = -1722 字符向數字轉換失敗
LOGIN_DENIED — ORA-01017 SQLCODE = -1017
NO_DATA_FOUND — ORA-01403 SQLCODE = +100 沒有找到數據
NOT_LOGGED_ON — ORA-01012 SQLCODE = -1012 沒有鏈接到數據庫
PROGRAM_ERROR — ORA-06501 SQLCODE = -6501 內部錯誤
STORAGE_ERROR — ORA-06500 SQLCODE = -6500
TIMEOUT_ON_RESOURCE — ORA-00051 SQLCODE = -51
TOO_MANY_ROWS — ORA-01422 SQLCODE = -1422 返回多行
TRANSACTION_BACKED_OUT — ORA-00061 SQLCODE = -61
VALUE_ERROR — ORA-06502 SQLCODE = -6502 數值轉換錯誤
ACCESS_INTO_NULL試圖爲NULL對象的屬性賦值
ZERO_DIVIDE — ORA-01476 SQLCODE = -1476 被零除
OTHERS — 其它任何錯誤的處理

8八、如何使用異常?
在 oracle中有三種類型的異常。預約義的異常 非預約義的異常 用戶定義的異常 第二種非預約義的異常是與特定的oracle錯誤關聯。而且用PRAGM EXCEPTION_INIT(EXCEPTION_NAME,ERROR_NUMBER)關聯一塊兒的。可是到底有什麼用啊? 例如:declare dup_primary_key exception; pragma exception_init(dup_primary_key,-1); begin insert into itemfile values(‘i201′,’washer’,'spares’,100,50,250,12,30); exception when dup_primary_key then dbms_output.put_line(‘重複項編號-主鍵衝突’); end
第一種的使用方法:exception
when 異常名稱 then
異常處理代碼;
第三種的用法:if 條件 then
raise_application_error(-20000「「「`-20999,提示信息);
end if;
8九、優化的策略通常包括:
•內存優化
•操做系統優化
•數據存儲的優化
•網絡優化等方法
具體到不一樣的數據庫涉及到要調整不一樣的數據庫配置文件、不一樣的操做系統參數、網絡參數等等, 不一樣的數據庫不一樣.算法

相關文章
相關標籤/搜索