來源:http://blog.csdn.net/hzfu007/article/details/6182151
經常碰到需要把sql server的數據遷移到Oracle的情況。
在網上查找一下,有很多方法,有用第三方工具的等,但sql server本身就提供一個“導入導出”的工具,用這個工具就可以把sql server數據轉換到oracle中。
下面簡單列一下操作步驟:
1、
在sql server中打開導入導出工具,在選擇源數據界面上選擇數據源,一般默認就可以了。輸入源數據的服務器ip、用戶名、密碼,選擇數據庫,下一步。
2、
選擇目的界面中,這里要說明下,最好選擇”MicroSoft OLE DB Provider for Oracle方式(這種方式有個缺點就是如果sqlserver表中含有ntext字段的時候,且有多個的時候,就轉換不了,這個時候用Oracle Provider for ole DB這種方式就行,用這個方式的時候,在轉換界面的時候,因為默認會用long字段來對應,所以需要手工在列映射與轉換界面直接把建表語句中的long字段修改成clob,再轉換,ok),選擇另外其他方式時那些表和字段的映射好像不太准確(我沒有一一去驗證其他方式).輸入服務器名稱和用戶密碼,測試成功后,下一步。
3、在指定復制或查詢界面中,選擇“從數據庫復制表和視圖”方式,下一步。
4、在選擇源表和視圖界面中,選擇要轉移的表和視圖。然后一直按照提示來操作就可以了。
注意事項:
1、這些表中的字段映射可能要手工來指定。不過一般自動默認都可以了。
2、sqlserver導入到oracle的表和字段在oracle中用sql語句訪問的時候需要加上雙引號才能訪問,這個就非常麻煩。因為數據遷移的時候需要
頻繁的操作這些。所以我用了一個很簡單的方法,就是在oracle重建所有表,然后把數據拷進來。
附:
Access, SQL Server, and Oracle數據類型的對應關系
The table below shows the ADO Data Type mapping between Access, SQL Server, and Oracle:
DataType Enum | Value | Access | SQLServer | Oracle |
---|---|---|---|---|
adBigInt | 20 | BigInt (SQL Server 2000 +) | ||
adBinary | 128 | Binary TimeStamp |
Raw * | |
adBoolean | 11 | YesNo | Bit | |
adChar | 129 | Char | Char | |
adCurrency | 6 | Currency | Money SmallMoney |
|
adDate | 7 | Date | DateTime | |
adDBTimeStamp | 135 | DateTime (Access 97 (ODBC)) | DateTime SmallDateTime |
Date |
adDecimal | 14 | Decimal * | ||
adDouble | 5 | Double | Float | Float |
adGUID | 72 | ReplicationID (Access 97 (OLEDB)), (Access 2000 (OLEDB)) | UniqueIdentifier (SQL Server 7.0 +) | |
adIDispatch | 9 | |||
adInteger | 3 | AutoNumber Integer Long |
Identity (SQL Server 6.5) Int |
Int * |
adLongVarBinary | 205 | OLEObject | Image | Long Raw * Blob (Oracle 8.1.x) |
adLongVarChar | 201 | Memo (Access 97) Hyperlink (Access 97) |
Text | Long * Clob (Oracle 8.1.x) |
adLongVarWChar | 203 | Memo (Access 2000 (OLEDB)) Hyperlink (Access 2000 (OLEDB)) |
NText (SQL Server 7.0 +) | NClob (Oracle 8.1.x) |
adNumeric | 131 | Decimal (Access 2000 (OLEDB)) | Decimal Numeric |
Decimal Integer Number SmallInt |
adSingle | 4 | Single | Real | |
adSmallInt | 2 | Integer | SmallInt | |
adUnsignedTinyInt | 17 | Byte | TinyInt | |
adVarBinary | 204 | ReplicationID (Access 97) | VarBinary | |
adVarChar | 200 | Text (Access 97) | VarChar | VarChar |
adVariant | 12 | Sql_Variant (SQL Server 2000 +) | VarChar2 | |
adVarWChar | 202 | Text (Access 2000 (OLEDB)) | NVarChar (SQL Server 7.0 +) | NVarChar2 |
adWChar | 130 | NChar (SQL Server 7.0 +) |
* In Oracle 8.0.x - decimal and int are equal to number and number(10).