ORACLE官方提供的Sql Developer自帶的Oracle Migration Workbench。
什么是Oracle SQL Developer?在官方頁面上,是這樣介紹它的:
Oracle SQL Developer is a free and fully supported graphical tool for database development. With SQL Developer, you can browse database objects, run SQL statements and SQL scripts, and edit and debug PL/SQL statements. You can also run any number of provided reports, as well as create and save your own. SQL Developer enhances productivity and simplifies your database development tasks .
另外,通過第三方驅動包,該工具還支持連接和管理各種主流數據庫服務器。
下面就把我使用這個工具遷移Microsoft SQL Server 2008數據庫到Oracle 11G的過程記錄下來,為了積累也為分享。
第一部分:獲取工具
第二部分:建立資料檔案庫(Migration Repository)
第四部分:SqlServer中的架構到Oracle中的模式,名稱的處理
第六部分:存儲過程和函數
首先,當然是獲得工具,該工具在Oracle Sql Developer官方下載頁面里面可以直接下載到。Windows 32位直連地址:Windows 32bit Sql Developer。Oracle Sql Developer需要JDK的支持,在下載頁面中提供了包含JDK的下載包,還有支持各種操作系統的下載選項。
下載后,解壓到任意位置。直接運行程序。第一次運行,需要指定JDK的目錄。
啟動后,我們要做的第一件事,不干別的,先下載SQL SERVER的驅動程序。點擊菜單幫助,選擇檢查更新,彈出檢查更新向導窗口,第一頁一般是廢話,直接下一步,等更新中心列表加載完畢后,只選擇“Third Party SQL Developer extensions”,點擊下一步,等待更新搜索完畢后,中列表中找到並選中 JTDS JDBC Driver,如下圖:
下一步,在許可協議頁面,點擊“我同意”按鈕后再點下一步,等下載完畢后關閉窗口,彈出提示需要重啟程序才能完成更新,點擊“是”。等程序重啟完畢。
環境准備完畢,開始進入到正題移植數據庫。
建立資料檔案庫(Migration Repository)
一、連接到Oracle
在程序左邊的連接窗口中,點擊加號按鈕,添加一個到Oracle數據庫的dba連接,如下圖:
配置完成后,點擊連接按鈕,連接到數據庫。
二,建立用戶
打開到Oracle數據的連接,新建一個用戶,我們要在該用戶的模式中建立所謂的“資料檔案庫”,並使用該用戶去建立SQL Server移植后的用戶名,以及做其它的一些工作。按照幫助中的說明,這個用戶最少需要以下權限和角色:
Roles
CONNECT WITH ADMIN OPTION,RESOURCE WITH ADMIN OPTIONPrivileges
ALTER ANY ROLE,ALTER ANY SEQUENCE,ALTER ANY TABLE,ALTER TABLESPACE,ALTER ANY TRIGGER,COMMENT ANY TABLE,CREATE ANY SEQUENCE,CREATE ANY TABLE,CREATE ANY TRIGGER,CREATE VIEW WITH ADMIN OPTION,CREATE PUBLIC SYNONYM WITH ADMIN OPTION,CREATE ROLE
CREATE USER,DROP ANY SEQUENCE,DROP ANY TABLE,DROP ANY TRIGGER,DROP USER,DROP ANY ROLE,GRANT ANY ROLE,INSERT ANY TABLE,SELECT ANY TABLE,UPDATE ANY TABLE
以下語句直接建立一個名為migrations的用戶:
-- Create the user
create user MIGRATIONSidentified by MIGRATIONS
default tablespace USERS
temporary tablespace TEMP
profile DEFAULT;
-- Grant/Revoke role privileges
grant connect to MIGRATIONS with admin option;
grant resource to MIGRATIONS with admin option;
-- Grant/Revoke system privileges
grant alter any role to MIGRATIONS;
grant alter any sequence to MIGRATIONS;
grant alter any table to MIGRATIONS;
grant alter any trigger to MIGRATIONS;
grant alter tablespace to MIGRATIONS;
grant comment any table to MIGRATIONS;
grant create any sequence to MIGRATIONS;
grant create any table to MIGRATIONS;
grant create any trigger to MIGRATIONS;
grant create any view to MIGRATIONS;
grant create materialized view to MIGRATIONS with admin option;
grant create public synonym to MIGRATIONS with admin option;
grant create role to MIGRATIONS;
grant create session to MIGRATIONS with admin option;
grant create synonym to MIGRATIONS with admin option;
grant create tablespace to MIGRATIONS;
grant create user to MIGRATIONS;
grant create view to MIGRATIONS with admin option;
grant drop any role to MIGRATIONS;
grant drop any sequence to MIGRATIONS;
grant drop any table to MIGRATIONS;
grant drop any trigger to MIGRATIONS;
grant drop tablespace to MIGRATIONS;
grant drop user to MIGRATIONS;
grant grant any role to MIGRATIONS;
grant insert any table to MIGRATIONS;
grant select any table to MIGRATIONS;
grant unlimited tablespace to MIGRATIONS with admin option;
grant update any table to MIGRATIONS;
再次點擊連接中的加號按鈕,添加一個使用剛剛新建立的用戶的連接。
連接后,在該連接上點擊右鍵,選擇移植資料檔案庫-關聯移植資料檔案庫,程序會在該用戶下建立移植資料檔案庫所需要的表、存儲過程等等,彈出一個對話框顯示當前建立的進度,稍等片刻即建立完畢。
數據庫移植向導
一,建立到源SqlServer數據庫的連接
在連接窗口中,點擊綠色加號按鈕,打開連接配置窗口,按下圖建立到SqlServer的連接:
因為動態商品的使用,使得原來SqlServer配置頁中默認的1433往往沒有辦法連接到SqlServer2008數據庫,修改為1434即可。----------------------------這個地方一定要將端口設置為1433才能導數據,否則只建表無法導數據
二、啟動數據庫移植向導
建立到SqlServer的連接后,開始對數據庫進行移植。有兩個地方可以啟動數據庫移植向導,一個是在新建的SqlServer連接上點擊右鍵,選擇移植到Oracle,另一個是在菜單工具-移植-移植,啟動向導后,第一頁當然是向導的簡介,通過簡介,我們可以知道整個移植過程有7步,並且有兩個先決條件,如下圖:
直接點擊下一步。
三、選擇資料檔案庫
在這個頁面中,我們也可以去建立連接和資料檔案庫,也就是前一部分中我們所做的工作在這里也可以進行。當然選擇我們剛剛建立的migrations連接,如下圖:
這里截斷的意思是將資料檔案庫清空,我們建立一個移植項目后,所有抓取的數據庫結構信息、統計信息還有轉換記錄等都保存在這個資料檔案庫中,只要項目名稱不同,即使不清空資料檔案庫也不會影響到移植工作。當然,如果希望更“清爽”一點,也可以勾選。這是后話。
四、為轉換項目命名
選擇好資料檔案庫后,點擊下一步,為我們的轉換項目輸入名稱和備注,以便識別。另外,還需要指定腳本生成目錄,用於存放向導執行過程中生成的腳本。
五、選擇源數據庫連接
然后繼續下一步,選擇源數據庫,在這里有聯機和離線兩種模式,聯機即是直接連接到源數據進行抓取,而離線則是在SqlDeveloper不直接連接到源數據庫的情況下,通過SqlDeveloper提供的腳本預先捕獲數據庫,得到數據庫結構文件后,通過向導導入。
這里當然是選擇我們剛才建立的SqlServer連接。
六、選擇捕獲源數據庫
在這一步中,顯示為兩個多選框,左邊列出Sql Server中所有可選的數據庫,通過中間的按鈕將數據庫移動到右邊的已選數據庫中。如下圖:
七、數據類型轉換選項
在這一頁中,列出了所有系統內置的數據類型轉換對應關系。可以其進行修改,一般不作修改直接下一步。如下圖:
八、選擇目標數據庫
與源數據庫的選擇一樣,目標數據庫的選擇同樣也有聯機和離線兩種方式。仍舊選擇聯機。選擇orcl(migrations)連接。
九、移動數據選項
這個頁面中,也提供了聯機或離線兩種方式進行數據移動。所謂聯機雖然“據說”可以直接以聯機的方式從源數據庫中移動數據到Oracle中,可我試過幾次沒有成功,原因不明。最終我選擇了離線的方式進行數據移動。所謂離線移動數據,是在我們指定的腳本存放目錄中生成“數據移動”腳本,分別在源數據庫中卸載數據(即導出)和在目標數據庫中加載數據。選擇好后,點擊下一步。
十、選項完畢,開始執行
在向導的最后,是一個用於確認的“概要”頁面。確認無誤后,點擊完成。移植將會開始執行。
SqlServer中的架構到Oracle中的模式,名稱的處理
通過執行移植向導,如果沒有錯誤的話,那么表結構基本上都會建立起來了,在連接中打開orcl(migrations)連接,找到最下面的其它用戶,假設你的表都在dbo架構下,那么找到dbo_源數據庫名,展開它,可以看到在表中已經有原數據庫中的所有表。但是,為什么會顯示為dbo_源數據庫名呢?我很不喜歡這樣的用戶名。我希望它顯示為源數據庫名,要怎樣做呢?
在程序的左下角,是移植項目窗格,在里面可以看到我們剛才建立的移植項目名。展開它,會顯示我們執行過向導的日期和時間,繼續展開,可以看到兩個節點,叫作捕獲的數據庫對象和轉換的數據庫對象,如下圖:
在捕獲的數據庫對象上點擊右鍵,選擇轉換,再次打開數據移植向導。點擊下一步,會直接跳轉到轉換頁,這一次的轉換頁面與前一部分的轉換頁稍有不同。不同之處在於多出了一個選項卡,叫對象命名,選擇它打開,如下圖所示:
在這個頁面中,顯示了一個數據列表,列出了源數據庫的表名、字段名、約束名、視圖名、架構名等等所有的標識符的原始標識符、新建標識符、是否經過轉換、原始限定名、標識符類型等信息。因為Oracle中不支持30個字符以上的標識符,所以當碰到原始標識符超過30個字符時,移植向導會自動將之截斷,如果有重名,則會加上_1之類的后綴。
很明顯,在這里,它把我們原來的dbo架構名轉換成了dbo_數據庫名,我們只要找到它,將新標識符改為數據名,即可實現我們這部分的需求。
修改完成后,點擊下一步,接着按之前的設置完成整個向導,將修改提交到資料檔案庫中。注意,這次的向導並沒有去幫我建立新用戶和表結構等等,還需要進一步操作。
在主界面中的移植項目窗格,在轉換的數據庫對象上點擊右鍵,選擇生成目標,再次打開移植向導,又一次按之前我們的選擇完成整個向導,這一次,才是真正建立了我們想要的用戶名。
然后,把自動生成的老用戶名和模式都刪除掉吧。具體操作就不細說啦。
轉移數據
上一部分說了移植向導在Oracle數據庫中自動生成了我們所需要的表結構,但是並沒有幫我把數據成功導入過去。於是我們采用了生成離線數據移動腳本的方式來導數據。
在移植向導中的項目頁中,我們選擇了腳本生成的目錄,打開該目錄,可以看到一個名為“數據移動\項目名稱\日期時間\”的子目錄,其中包含了如下圖所示的文件:
看以看到其中包含了4個腳本文件,兩個是用於Windows的,另兩個是用於*nix的。名為unload_script的是數據導出腳本,用於從源數據庫中生成數據導出文件,名為oracle_ctl的是數據導入腳本。
打開cmd,瀏覽到當前目錄,執行以下命令以導出數據:
>unload_script [server] [username] [password]
其中的server是源數據庫服務器,username和password是能訪問到源數據庫的用戶名密碼。稍等一會,提示導出完成后,接着執行下面命令以導入數據:
>oracle_ctl [oracleusername] [password]
在這里不需要指定數據庫名之類的,因為在腳本中已經指定了。
等待片刻導入完畢后即可。蠻簡單的。不明白為什么聯機就是不能成功,做的難道不是一樣的工作嘛。