【DB筆試面試518】在Oracle中,什麼是外部表?
- 2019 年 10 月 8 日
- 筆記
♣
題目部分
在Oracle中,什麼是外部表?
♣
答案部分
外部表是指不存在於資料庫中的表。通過向Oracle提供描述外部表的元數據,可以把一個作業系統文件當成一個只讀的資料庫表,就像這些數據存儲在一個普通資料庫表中一樣來進行訪問。外部表是對資料庫表的延伸。外部表只能在Oracle 9i之後的版本來使用。
Oracle外部表用來存取資料庫以外的文本文件(Text File)或Oracle專屬格式文件。因此,建立外部表時不會產生段、區、數據塊等存儲結構,只有與表相關的定義放在數據字典中。外部表僅供查詢,不能對外部表的內容進行修改(例如INSERT、UPDATE、DELETE等操作)。不能在外部表上建立索引。因為創建索引就意味著要存在對應的索引記錄,而其實外部表的數據沒有存儲在資料庫中,故在外部表上是無法建立索引的。
外部表使用兩種訪問驅動程式。ORACLE_LOADER訪問驅動程式只能用於讀取外部表中的表數據並將其載入資料庫。它使用文本文件作為數據源。ORACLE_LOADER訪問驅動程式使用SQL*Loader語法來定義外部表。此命令並不創建外部文本文件。ORACLE_DATAPUMP訪問驅動程式既可以將表數據從外部文件載入資料庫中,也可以將數據從資料庫卸載到外部文件中。它使用二進位文件作為外部文件。這些二進位文件與impdp和expdp實用程式所用文件的格式相同,並可與之互換。
如果外部表採用PARALLEL的方式載入的話,那麼載入的數據是無序的。所以,這種情況需要綜合考慮,尤其是在使用該方式來查看告警日誌文件內容的時候需要特別注意。
外部表有如下幾點特性:
① 外部表的數據位於文件系統之中,並按一定格式分割。文本文件或者其它類型的表可以作為外部表。作業系統文件在資料庫中的標誌是通過一個邏輯目錄來映射的,所以外部表需要在Oracle資料庫「服務端」創建目錄,這些OS文件必須放在這些目錄中。
② 對外部表的訪問可以通過SQL語句來完成,而不需要先將外部表中的數據裝載進資料庫中。
③ 外部表是只讀的,因此,只能對外部表進行SELECT操作,不能對外部表執行DML(DELETE、UPDATE和INSERT等)操作,也不能創建索引,但是可以創建視圖,也可以創建同義詞。
④ ANALYZE語句不支援採集外部表的統計數據,應該使用DMBS_STATS包來採集外部表的統計數據。
⑤ 可以對外部表執行查詢、連接和並行操作。
⑥ 外部表不支援LOB對象。
⑦ 從Oracle 12.2開始支援外部表分區的功能。
與外部表相關的幾個視圖如下所示:
SELECT
* FROM
DBA_EXTERNAL_LOCATIONS; --描述外部表的位置
SELECT
* FROM
DBA_EXTERNAL_TABLES;--所有的外部表
SELECT
* FROM
DBA_DIRECTORIES;--資料庫中所有的目錄對象
有關外部表的一個使用示例如下所示:
CREATE
DIRECTORY EXT_LOG AS
'/u01/app/oracle/ext_log';
DROP
TABLE
ALERT_LOG;
CREATE
TABLE
ALERT_LOG(
TEXT VARCHAR2(4000)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT
DIRECTORY EXT_LOG
ACCESS PARAMETERS
(RECORDS DELIMITED BY
NEWLINE ) LOCATION ('log.xml')
);
上邊的SQL語句創建了一個外部表,執行下面的SQL語句就可以查看文件/u01/app/oracle/ext_log/log.xml的內容了。
SELECT
* FROM
ALERT_LOG;
需要注意的是,如果外部表對應的文件中包含中文,那麼需要設置正確的外部表的字符集。設置方法為在「RECORDS DELIMITED BY NEWLINE」的後邊加上外部文件的字符集:
RECORDS DELIMITED BY
NEWLINE CHARACTERSET utf8
& 說明:
有關外部表及外部表的使用更多內容介紹可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140135/、http://blog.itpub.net/26736162/viewspace-1221559/
真題1、Which two operations can be performed on an external table? (Choose two.)
A、Create a view on the table.
B、Create an index on the table.
C、Create a synonym on the table.
D、Add a virtual column to the table.
E、Update the table using the UPDATE statement.
F、Delete rows in the table using the DELETE command.
答案:A、C。
題目問的是哪兩個操作可以在外部表上執行,根據本小節的內容可以知道,在外部表上可以創建視圖,可以創建同義詞,但不能創建索引,不能添加列,不能執行DML語句,所以,本題的答案為A和C。
本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。