1. 程式人生 > >Oracle使用超大SQL腳本文件恢復數據問題記錄

Oracle使用超大SQL腳本文件恢復數據問題記錄

行數 目錄 步驟 程序 內容 creat 保存 rdquo 字符編碼

在以前獲取的Oracle數據庫備份一般都是dmp文件,創建表空間和用戶就直接使用imp或者impdp導入即可。

這一次遇到的情況比較特殊,對方提供數據時給我的是使用SQLPlus導出的SQL腳本文件,是Linux系統中導出的,因為很難讓對方再次提供數據,因此只有用這個來導入數據。導入速度慢不說,還挺麻煩,不過沒辦法,問題總得解決。

在這個過程中遇到兩大問題:

1. SQL腳本文件太大(超過1G),Windows上看不了內容,不知道怎麽導入到數據庫中。

一般SQLPlus執行SQL腳本文件倒是容易,登錄到SQLPlus,然後在界面中輸入"@SQL文件名",回車就可以執行。

但是這一次是進行數據恢復,對方導出的SQLPlus中應該是有表空間和用戶信息的,如果預先創建對應的表空間和用戶等信息,在SQLPLus中執行SQL腳本恢復數據就會遇到錯誤。

2. SQL腳本的文件編碼問題導致使用sqlplus執行時報錯。

錯誤提示為“ORA-01756:引號內的字符串沒有正確結束”,在網上查了,是sql腳本的字符編碼和Oracle的字符編碼不一樣導致的。

我的Oracle是安裝在windows系統,用的是GBK編碼,但SQL腳本文件的字符集是UTF-8,需要將SQL腳本文件轉換成GBK字符編碼才行。

小的SQL腳本使用Notepad++或notepad2文本編輯器打開,改下編碼保存即可。大的SQL腳本可以用UltraEdit應該可以轉換字符編碼。不過UltraEdit收費,我沒買。所以在網上找了方案,可以用powershell來轉換字符編碼。1.6G的SQL腳本文件,花了一個來小時才轉換完成。

下面是解決此問題的步驟:

1. 首先查看下SQL腳本的內容,獲取下關鍵的表空間和用戶等信息:

在Windows中可以使用在命令行提示符中輸入“type SQL文件名”來查看腳本內容,輸出create table和create index腳本段後就可以使用Ctrl+C組合鍵退出讀取進程。

在輸出內容中找到表空間信息,以及授權語句中的用戶名等。

2. 根據步驟1中獲取到的表空間和用戶信息,創建對應的表空間和用戶。

3. 使用PowerShell將SQL腳本文件轉換為當前系統默認的字符編碼:

Windows 7 系統中可以在開始菜單中的“搜索程序和文件”輸入框中輸入powershell,找到PowerShell的命令行界面。

使用cd命令切換到腳本文件所在目錄:“cd 路徑”

然後執行下面的來轉換字符編碼:

Get-Content -path .\aa.sql|Out-File .\aa-output.sql -Encoding "default"

轉換過程可以按F5刷新看下輸出文件的大小變化(powershell中沒提示轉換進度),過一段時間不再變化就應該是完成了,在powershell的窗口中按回車鍵,如果powershell界面光標閃爍,可以輸入新的命令了,就能確認轉換過程完成了。

4. 使用sqlplus登錄Oracle,然後在輸入”@SQL腳本文件名“命令執行,等待執行完成即可。

註:sqlplus中使用SQL腳本導入上百萬數據真慢,沒註意看了,轉個字符編碼花了一個小時,導入數據花了一兩個小時。

Oracle使用超大SQL腳本文件恢復數據問題記錄