使用Oracle Sql Developer將SQL SERVER 2008資料庫移植到Oracle 11g

來源:互聯網
上載者:User

標籤:

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 OPTION

Privileges
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 MIGRATIONS

identified 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]

      在這裡不需要指定資料庫名之類的,因為在指令碼中已經指定了。

      等待片刻匯入完畢後即可。蠻簡單的。不明白為什麼聯機就是不能成功,做的難道不是一樣的工作嘛。

使用Oracle Sql Developer將SQL SERVER 2008資料庫移植到Oracle 11g

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.