我嘗試著將oracle高本版資料庫裡的資料移到低版本的oracle 資料庫。
會這麼做的原因為我的系統裡只有低版本的oracle資料庫(Oracle 9),而測試環境測卻是高版本的oracle(Oracle 10)。為了得以順利進行開發,因此需要將測試環境裡的oracle資料轉移到我的開發環境,包含table、view、stored procedure等等;要在開發環境─也就是低版本的oracle─再建了一份相同、或類似的資料庫,以便於我開發。
方法很簡單,步驟卻很瑣碎。
瑣碎的起因於下:
一、Oracle本身所附的import/export是為了將資料轉換到其他平台或場所,限定、指定、忽略tablespace或是其他我不相要的東西,是一個很高的技術頩頸,那需要嵌import/export這個工具摸透透。
二、import/export本身並不支援向下相容。其實這是最主要的限制。oracle import/export工具不可以將高版本的dump檔import到低版本oracle 資料庫。
三、我不想單一sql的insert、create。尤其測試環境的資料量還真的蠻大的,SQL create的部份也就算了,insert的部份,量並不小,可能一張table就是 3-500M的 .sql檔。這種.sql/.txt檔讀到任何一個IDE都是個問題。
我所採用的步驟如下:
一、使用PL/SQL Developer的export table工具產生壓縮檔。
這是PL/SQL Develop公司自製的壓縮格式,附檔名是.pe,檔案容量比oracle的 .dmp檔還要來得小。使用方式是tools->export tables->PL/SQL Developer。要記得選擇全部或所需要的table。PL/SQL Developer的export table工具還提供了where cause,真的不需要那麼多資料的話,下個where就可以了。不過這情形可能就需要針對個別table來操作,因為限制欄位不見得都相同。如果是限制rownum還好,如果是想要取得像是「近2年」的資料,就比較麻煩了。雖然這並不相容於普偏規格,但我還蠻喜歡這個格式。
二、使用PL/SQL Developer的export user object工具。
剛才已經產出table部份,這裡則是用來產出stored procedure、view、sequence等其他啦哩啦雜的東西。這部份 PL/SQL Develop只提供sql檔案,不過還好,這種東西怎麼大也不會大到50M。
三、將剛才產生的啦哩啦雜的SQL檔匯入到資料庫。
這部份很簡單嗎?也不是那麼儘然。因為他所產生的SQL檔有一些不太像是SQL的特殊語法,例如prompt等等。如果你有使用過SQLPlus就知道這種東西是在SQLPlus下用的。因此在使用copy-paste時,不能貼在一個空白的sql window下,需要先new 一個command window。Command window是PL/SQL Develop封裝SQLPlus的一個interface,當然毫無疑問,他肯定比SQLPlus好用。就直接貼到新開的command window下去執行,當然如果你想要直接使用SQLPlus可能也可以…。
沒有留言 :
張貼留言