1. 透過SQL SERVER 2008 Standard版本的IMPORT/EXPORT 轉換
2. 安裝Oracle Client/設定TNS
3. Create Oracle User Account/Create Oracle Datafile
4. import data to Oracle
5. 注意事項
環境:
Source: SQL Server Express 2008 R2
Target: Oracle DB 10.2.0.4
轉換Server:SQL Server 2008 R2 Standard
一、安裝匯入匯出工具
先行安裝SQL Server 2008 R2 Standard版本,上面會有import/import工具
二、安裝Oracle Client & TNS
注意事項…這邊也搞了很久:
Oracle Client設的要設Oracle Home(我的電腦→內容→進階→新增系統變數):
TNS:
C5SUB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.55.78.8)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = c5pepm)
)
)
PS.安裝及設定TNS這邊…不說明…基本功夫
三、Create Datafile/User
CREATE TABLESPACE SAFTY DATAFILE
'/oradata/c5pepm/data/safty/safty_01.dbf' SIZE 20M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK ON;
CREATE USER SAFTY
IDENTIFIED BY VALUES 'safty'
DEFAULT TABLESPACE SAFTY
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT CONNECT TO SAFTY;
GRANT RESOURCE TO SAFTY;
GRANT CREATE TABLE TO safty;
ALTER USER SAFTY DEFAULT ROLE ALL;
GRANT UNLIMITED TABLESPACE TO SAFTY;
ALTER USER SAFTY QUOTA UNLIMITED ON SAFTY;
ALTER USER SAFTY IDENTIFIED BY safty;
四、執行SQL Server匯入和匯出精靈:
選擇來源端:SQL Server Native Client 10.0、伺服器名稱,再按一下重新整理,選擇要匯出的資料庫
選擇要匯入的Oracle DB,選擇Oracle Provider for OLE DB,再按一下屬性,資料來源:填入TNS設定的名稱及帳號密嗎,最後測試一下測試連線
下一步…
選擇要匯入的TABLE,若要查看SQL語法,可以按編輯對應,
下一步…
下一步…
下一步…
下一步…
完成匯入資料,關閉。
五、注意事項
1.ORA-06413 Error
若安裝在64位元版本,在import/export 會有error產生
Test connection failed becase of an error in: ORA-06413: Connection not open.
原因是安裝的路徑有" C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn",( )為不合法字元,不能運行,解法就是把DTS這一個目錄COPY出來。
COPY FILE C:\Program Files (x86)\Microsoft SQL Server\100\DTS\ TO C:\DTS
在次執行" DTSWizard.exe"此檔案(看起來是免安裝版的軟體)
2.Client設定
Oracle 10g Clinet(每一版本有不一樣的設定):
[HKEY_LOCAL_MACHINE\SOFTWARE
\Microsoft\MSDTC\MTxOCI]
\Microsoft\MSDTC\MTxOCI]
其它版本詳見此網頁:
3.SQL Server轉Oracle,在sqlplus下Select會出錯,需要加雙引號才查得到資料。
原因:在轉的過程,SQL Server自動把table加雙引號,需要把雙引號拿掉。
如果已經轉過了要在修改,方式如下:
使用SYS帳號:
SELECT 'ALTER TABLE "' ||SEGMENT_NAME || '" RENAME TO ' ||SEGMENT_NAME || ';' FROM DBA_SEGMENTS WHERE OWNER='SAFTY' AND SEGMENT_TYPE='TABLE' AND SEGMENT_TYPE NOT LIKE ('%$%');
在到User帳號底下執行產生的SQL,修改Table名稱方式如下:
ALTER TABLE OLD_TABLE_NAME RENAM TO NEW_TABLE_NAME;