外部表在Oracle數據庫中使用的限制
外部表是指不在數據庫中的表,如操作系統上的一個按一定格式分割的文本文件或者其他類型的表。這個外部表對於Oracle數據庫來說,就好像是一張視圖,在數據庫中可以像試圖一樣進行查詢等操作。這個試圖允許用戶在外部數據上運行任何的SQL語句,而不需要先將外部表中的數據裝載進數據庫中。不過需要注意是,外部數據表都是隻讀的,不能夠更改。不過在使用外部表時仍然有不少的限制。
限制一:需要先建立目錄對象。
在使用外部數據表的時候,需要先建立目錄對象。也就是說,要想Oracle數據庫系統(在Oracle中實現控制文件多路複用)訪問操作系統文件,就必須在數據庫中建立指向這個操作系統文件的目錄對象,然後通過這個目錄對象訪問相應的操作系統文件,即用目錄對象存儲操作文件的保存位置。不過需要注意,這個目錄對象普通用戶是無權創建的。一般情況下只有特權用戶或者數據庫管理員角色纔可以創建目錄對象。如果允許其他用戶也可以創建目錄對象的話,就需要授權給其他用戶。
其實這個目錄對象就是操作系統中文件或者表格的存儲位置。不過在建立對象的時候,需要小心,Oracle數據庫系統不會去確認這個目錄是否真的存在。如果在輸入這個目錄對象的時候,不小心把路徑寫錯了,那可能這個外部表仍然可以正常建立,但是卻無法查詢到數據。由於建立目錄對象時,缺乏這種自我檢查的機制,爲此在將路徑賦予給這個目錄對象時,需要特別的注意。另外需要注意的是路徑的大小寫。在Windows操作系統中,其路徑是不區分大小寫的。而在Linux操作系統,這個路徑需要區分大小寫。故在不同的操作系統中,建立目錄對象時需要注意這個大小寫的差異。最好數據庫管理員可以養成一個習慣,無論在什麼操作系統中,都採用小寫的目錄名與文件名。那麼在不同的操作系統中,就不用受到這個大小寫的困擾了。最後需要注意的是,目錄對象名必須唯一。如果目錄對象名字有重複的話,系統會提示錯誤信息:“名稱已有現有對象引用”,而不會自動覆蓋原有的對象名設置。
雖然這個對象名設置比較簡單,但是其是數據庫尋找操作系統上文件的唯一途徑。所以這個目錄對象的創建必須確保準確。否則的話,外部表就可能無法正常使用。
限制二:對於操作系統文件的限制。
其實外部表簡單的說,就是跟操作系統上固定格式的文件或者表格的一個連接。爲了Oracle數據庫系統能夠正確鏈接外部表,對於外部表的格式就提出了比較嚴格的要求。如果不符合這些要求的話,數據庫系統就無法正確讀取外部表中的數據。如對於分隔符有比較嚴格的要求。雖然在外部文件或者表格中,可以使用多種分隔符,如英文狀態下的逗號或者分號等等。但是有一個限制,即在同一個操作系統文件中只能夠使用一個分割符號,要麼逗號或者分號等等。因爲在建立外部表時,必須指定操作系統文件所使用的分隔符號。如果有多種分隔符號的話,數據庫系統將無法識別。
另外在外部表格中,不能夠帶有標題信息。如現在有一張表格,以逗號分隔。而在其第一列數據中有各個列的標題信息。而數據庫系統在連接這個表的時候,會將這些標題信息當作普通的紀錄來對待。即會將這些信息也顯示在外部表中。爲此如果這個標題信息與外部表的字段類型不一致(如字段內容是number 數據類型,而標題信息則是字符型數據,則在查詢時就會出錯)。如果數據類型恰巧一致的話,這個標題信息Oracle數據庫也會當作普通記錄來對待。如在建立外部表的時候,最好確認一下操作系統文件中是否包含標題信息。如果有的話,需要刪除。否則的話,可能會出錯。
最後需要說明的是,當Oracle數據庫系統訪問這個操作系統文件的時候,會在這個文件所在的目錄自動創建一個日誌文件。無論最後是否訪問成功,這個日誌文件都會如期建立。查看這個日誌文件,可以瞭解數據庫訪問外部表的頻率、是否成功訪問等等。
限制三:在建立臨時表時的限制。
在建立臨時表時,也會有不少的限制。如表中字段的名稱有一些特殊字符的話,那麼這個表列的名稱必須使用英文狀態的下的雙引號連接起來。如採用 ”studentno#”。遇到列名字中有特殊符號時,如果不採用雙引號括起來,雖然臨時表可以正常創建,但是在採用的時候會出現錯誤,無法正常查詢數據。如數據庫系統可能會提醒:“數據庫插件錯誤”等信息。爲此最好在創建臨時表時不要在列名中使用一些特殊的字符。其實不光光是建立臨時表有這種限制,建立其他標或者試圖都有類似的限制。
其次,這個外部表畢竟與內部表不同。在創建外部表的時候,其實在數據庫中跟本沒有創建表。也就是說,不會爲外部表分配任何的存儲空間。創建外部表只是在數據字典中創建了外部表的元數據,以便對應訪問外部表中的數據,而不在數據庫中存儲外部表的數據。簡單地說,數據庫存儲的只是與外部文件的一種對應關係,如字段與字段的對應關係。而沒有存儲實際的數據。爲此在表的操作與管理上,就會受到很大的限制。如在外部表上,是不能夠爲表創建索引。因爲創建索引就意味着要存在對應的索引記錄。而外部表其實在數據庫不會有存儲。故在外部中是無法建立索引的。如果硬要建立的話,則系統會提示“操作在外部組織表上不受支持”的錯誤提示。同樣的道理,在數據庫中也不能夠更新外部表中的數據,如插入記錄、刪除記錄或者更新信息等等。簡而言之,這個外部表對於數據庫來說,是隻讀的,不可更新。
限制四:刪除外部表或者目錄對象。
當外部表不用時,需要及時刪除外部表或者與之對應的目錄對象。不過在刪除這些內容時會有一些限制。這些限制主要是管理上的限制,而不是技術上的限制。也就是說,Oracle數據庫系統沒有對其進行強制的`限制。但是如果數據庫管理員不遵守這些限制的話,可能會出現一些問題。如要先刪除外部表,然後再刪除目錄對象。有時候一個目錄對象中可能會包含多個外部表。此時必須要確認所有的外部表都不用了,都已經刪除乾淨了,然後才能夠刪除目錄對象。在創建外部表時,操作系統會判斷一下,與之對應的目錄對象是否已經創建。但是在刪除對象時,系統不會去判斷跟這個目錄對象關聯的外部表是否已經全部刪除。如果目錄對象刪除了,但是還有外部表存在。此時查詢這個外部表的時候,系統就會提示“對象不存在”的錯誤信息。所以這個刪除目錄對象時,數據庫系統缺乏一種檢查,此時只有數據庫管理員在刪除目錄對象時,先手工確認一下這個目錄對象是否存在其他的外部表。
要了解這個信息,則可以通過查詢dba_external_locations。通過查詢這張表,系統會反映當前所有的目錄對象以及相關的外部表,還會查詢出這些外部表所對應的操作系統文件的名字。先查詢這張表格,確定要刪除的對象沒有其他關聯的外部表時,再進行刪除。否則的話,需要先確認其他外部表的可用性。免得因爲誤刪除而導致外部表無法正常使用。
限制五:對於操作系統平臺的限制。
雖然Oracle數據庫是支持跨平臺的數據庫系統,即同時支持Windows或者Linux等多種操作系統。但是在使用外部表的時候需要注意一個問題,即在兩個操作系統上文本文件的存儲方式是不同的。如在Windows操作系統上利用txt文件建立了一個以逗號作爲分隔符的文件,其一行一條記錄。但是在Linux操作系統上打開的話,在其就可能使在同一行中顯示了。故爲了數據庫系統能夠正確識別操作系統文件,最好這個操作系統文件能夠和Oracle數據庫系統部署在同一臺服務器上或者同一種操作系統上。否則的話,很可能因爲格式的衝突,而導致數據庫系統無法正確讀取外部文件中的數據。
相關文章
-
ORACLE數據庫中的權限和角色
Oracle數據庫是一種大型關係型的數據庫,我們知道當使用一個數據庫時,僅僅能夠控制哪些人可以訪問數據庫,哪些人不能訪問數據庫是無法滿足數據庫訪問控制的。DBA需要通過一種機制來限制用戶可以做什麼,不能做什麼,這在Oracl -
oracle數據庫基礎使用方法解析
Oracle數據庫產品爲財富排行榜上的前1000家公司所採用,許多大型網站也選用了Oracle系統。下面是小編整理的關於oracle數據庫基礎使用方法解析,希望大家認真閱讀!基礎概念:數據庫:存儲數據的數據庫,Oracle一般只有一個全 -
使用Oracle9i數據庫程序的注意事項
凌晨我發了仿的帶帽檐的帽子,沒想到喜歡的JM不少,大家都問我怎麼織,由於上次那個帖忘了佔樓了,爲了JM們看起來方便特另開此帖,還請版主見諒哦。這是我第一次做教程,有很多的不足之處,還請各位JM們多 -
如何在Oracle數據庫10g中跟蹤SQL
在具有許多活躍用戶的繁忙生產環境中,跟蹤SQL會話是費時且十分複雜的,因爲在任何使用連接池的多層系統中處理SQL語句可能要涉及多個進程,或者甚至是不同的實例。利用Oracle數據庫10g,Oralce通過一個新的內置軟件包DBMS_MO -
Oracle數據庫中表的四種連接方式
Oracle表的連接是指在一個SQL語句中通過表與表之間的關連,從一個或多個表中檢索相關的數據,大體上表與表之間的連接主要可分四種,分別爲相等連接,外連接,不等連接和自連接,下文yjbys小編將從幾個典型的例子來分析Orac -
Oracle數據庫與FoxPro數據的轉換
各位領導、各位老師:回顧這一學年的工作,我心中經常在反思,我在學校教育工作中應該做些什麼,做了些什麼,做好了什麼?有了這些追問,使我的工作更有意義。在全身心地投入教育工作中我也感受到工作的快樂。爲今後更好的工作,現 -
在Excel中使用AMORDEGRC函數的方法
在Excel的使用中,我們有時需要使用到AMORDEGRC函數,那麼具體該如何去操作呢?很多朋友都不是很清楚,所以今天小編就爲大家詳細介紹在Excel中AMORDEGRC函數如何使用方法,不會的朋友可以參考本文,希望能對大家有所幫助!方法/步 -
Excel表中文本DOLLAR函數使用方法
導語:有關Excel表中文本DOLLAR函數使用方法,各位需要認真進行學習。下面是Excel表中文本DOLLAR函數使用方法,供各位閱讀和參考。在用Excel製作表格時,製作好了一個數據表,有時需要文本的貨幣函數,這裏可以用DOLLAR函數。那 -
oracle表空間啓動數據庫命令
爲了方便大家學習,下面yjbys小編爲大家準備了關於oracle表空間啓動數據庫命令的方法,歡迎閱讀。啓動數據庫命令分爲三個階段:startup nomountalter database mountalter database open本用戶讀取其他用戶對象的權限:selec -
Oracle數據庫臨時表管理技巧
我們在創建數據表的時候,若沒有特殊的指明,那麼我們創建的表是一個永久的關係型表格,也就是說,這個表格中對應的數據,除非是我們顯示的刪除的話,表中的數據是永遠都存在的。相對應的,在Oracle數據庫中還有一種類型的表,叫做臨