亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

IBM DB2跨平臺數(shù)據(jù)庫遷移步驟和注意事項

瀏覽:130日期:2023-11-08 17:54:57
這篇論壇文章主要介紹了IBM DB2跨平臺數(shù)據(jù)庫遷移的具體步驟和注意事項,更多內(nèi)容請參考下文。

db2是個有著廣泛商業(yè)應(yīng)用的關(guān)系數(shù)據(jù)庫軟件。作為一個數(shù)據(jù)庫管理員時常面臨著數(shù)據(jù)庫系統(tǒng)的遷移工作,這是一個復(fù)雜而艱巨的過程。互聯(lián)網(wǎng)和 db2 的幫助文檔中有許多關(guān)于 db2 數(shù)據(jù)庫遷移的介紹,但是對于 db2 數(shù)據(jù)庫的跨平臺遷移卻很少談及。本文將基于筆者的成功實踐,總結(jié)一下跨平臺數(shù)據(jù)庫遷移的步驟和注意事項。

簡介

設(shè)想您是一個 db2 商業(yè)數(shù)據(jù)庫系統(tǒng)的管理員。您被給予一項任務(wù),支持業(yè)務(wù)開發(fā)和測試團隊對商業(yè)系統(tǒng)的持續(xù)開發(fā),為他們創(chuàng)建一套獨立于產(chǎn)品環(huán)境的數(shù)據(jù)庫系統(tǒng),從而不影響日常的商業(yè)運作。由于種種原因,這套開發(fā)和測試數(shù)據(jù)庫系統(tǒng)將運行在一個不同于產(chǎn)品環(huán)境的操作系統(tǒng)。我們知道 db2 提供了一些方便的數(shù)據(jù)庫管理工具,比如數(shù)據(jù)庫的整體備份和恢復(fù)功能,用戶可以用它很方便的將一個 db2 數(shù)據(jù)庫從一臺物理節(jié)點遷移到另一個物理節(jié)點,但是 db2 的備份和恢復(fù)功能目前只支持同構(gòu)操作系統(tǒng)平臺間的遷移,比如從 windows 平臺到 windows 平臺,AIX 平臺到 AIX 平臺。對于上述任務(wù)要求的跨平臺的數(shù)據(jù)庫遷移,就沒有一個專門的工具可以很方便的實現(xiàn)。

遷移步驟

經(jīng)過筆者的實踐,總結(jié) db2 數(shù)據(jù)庫的跨平臺遷移步驟如下:

記錄源數(shù)據(jù)庫管理系統(tǒng)配置參數(shù),以備遷移過后數(shù)據(jù)庫系統(tǒng)性能調(diào)優(yōu);

檢查源數(shù)據(jù)庫系統(tǒng)對象,明確要遷移哪些數(shù)據(jù)庫系統(tǒng)對象;

導(dǎo)出源數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)集;

生成源數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)對象定義語句;

在目標平臺創(chuàng)建新的數(shù)據(jù)庫,參照源系統(tǒng)進行設(shè)置;

導(dǎo)入源數(shù)據(jù)集;

檢查數(shù)據(jù)集導(dǎo)入過程日志,排除可能的錯誤;

執(zhí)行數(shù)據(jù)對象定義語句;

檢查數(shù)據(jù)對象語句執(zhí)行日志,排除可能的錯誤;

檢查更新存儲過程的定義;

連接應(yīng)用系統(tǒng),測試數(shù)據(jù)庫遷移是否成功。

下面給出一個遵循上述步驟的具體例子,其中將給出執(zhí)行這些步驟的具體 db2 命令以供參考。

1. 記錄源數(shù)據(jù)庫管理系統(tǒng)配置參數(shù)。這些是很重要的數(shù)據(jù)環(huán)境設(shè)置,其中的一些設(shè)置關(guān)系到遷移能否成功。

清單 1. 顯示數(shù)據(jù)庫管理系統(tǒng)配置參數(shù)的命令

以下是引用片段:

db2 get dbm cfg

清單 2. 顯示數(shù)據(jù)庫配置參數(shù)的命令

以下是引用片段:

db2 get db cfg for source_db_name

注意:Italic part should be replaced by your settings.

注意:對于比較復(fù)雜的源數(shù)據(jù)庫,要注意它的應(yīng)用程序組內(nèi)存大小參數(shù)(appgroup_memo_sz)。如果它的大小不夠,后面生成數(shù)據(jù)對象定義的時候會有問題。

清單3. 顯示數(shù)據(jù)庫注冊表變量的命令

以下是引用片段:

db2set -all

清單 4. 顯示數(shù)據(jù)庫表空間的命令

以下是引用片段:

db2 list tablespaces show detail

清單 5. 顯示數(shù)據(jù)庫程序包的命令

以下是引用片段:

db2 list packages

上述顯示表空間和程序包的命令都需要先建立到源數(shù)據(jù)庫的連接。

2. 檢查源數(shù)據(jù)庫系統(tǒng)對象,明確要遷移哪些數(shù)據(jù)庫系統(tǒng)對象

如何檢查源數(shù)據(jù)庫系統(tǒng)對象?一個最直觀的方法就是使用DB2控制中心(db2cc)瀏覽查看表,視圖,觸發(fā)器,用戶定義的函數(shù),存儲過程等數(shù)據(jù)庫對象。尤其要注意有無大的表,比如一行數(shù)據(jù)的表定義可能大于8K的表。 這樣的表需要在目標數(shù)據(jù)庫上建立具有足夠頁大小的表空間。下面的步驟中將會給出列子。還需要注意的是有無外部定義的存儲過程,這些存儲過程所關(guān)聯(lián)的外部程序包需要手工重新關(guān)聯(lián)。

3. 導(dǎo)出源數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)集

db2 提供了一個工具叫作 db2move,用戶通過它可以把所有用戶定義的表中的數(shù)據(jù)導(dǎo)出到 IXF(集成交換格式)的文件中。同時,在導(dǎo)入數(shù)據(jù)的時候,它還可以生成表上的所定義的索引。具體的導(dǎo)出執(zhí)行命令如下:

清單 6. 導(dǎo)出源數(shù)據(jù)集

以下是引用片段:

db2move dbname

export -u

username

-p

password

根據(jù)數(shù)據(jù)庫大小,機器性能的不同,這個導(dǎo)出過程可能耗時幾分鐘到幾個小時不等。在筆者的經(jīng)歷中,這個導(dǎo)出過程就長達 2 個多小時。

4. 生成源數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)對象定義語句

在導(dǎo)出了數(shù)據(jù)之后,要做的就是導(dǎo)出數(shù)據(jù)對象定義。DB2提供了一個工具叫db2look,用戶可以通過它來生成數(shù)據(jù)庫中的數(shù)據(jù)對象定義,包括別名,表,索引,視圖,觸發(fā)器,用戶定義函數(shù),存儲過程等。具體的命令如下:

清單 7. 生成數(shù)據(jù)對象定義語句

以下是引用片段:

db2look -d dbname

-e -o

ddlfile

-i

username

-w

password

如果數(shù)據(jù)庫非常復(fù)雜,包含很多的數(shù)據(jù)對象定義,那么在執(zhí)行上述命令前,用戶有可能要先調(diào)整參數(shù)appgroup_memo_sz,才能夠順利的生成數(shù)據(jù)對象定義文件。下面是筆者修改這個參數(shù)的命令示例:

清單 8. 調(diào)整源數(shù)據(jù)庫參數(shù)

以下是引用片段:

db2 update db cfg for dbname using appgroup_mem_sz 51368

5. 在目標平臺創(chuàng)建新的數(shù)據(jù)庫,參照源系統(tǒng)設(shè)置參數(shù)

在源平臺上完成了數(shù)據(jù)導(dǎo)出和數(shù)據(jù)對象定義語句生成之后,下面就是要在目標平臺建立目標數(shù)據(jù)庫了。參考源數(shù)據(jù)庫的設(shè)置為新創(chuàng)建的數(shù)據(jù)庫配置適當(dāng)?shù)膮?shù),通常需要調(diào)整的參數(shù)有:

dbheap - 數(shù)據(jù)堆大小

catalogcache_sz - 目錄高速緩存大小

logbufsz - 日志緩沖區(qū)大小

util_heap_sz - 實用程序堆大小

buffpage - 緩沖池大小

sortheap - 排序列表堆

stmtheap - sql 語句堆

applheapsz - 缺省應(yīng)用程序堆

筆者使用的調(diào)整語句如下:

清單 9. 調(diào)整語句

以下是引用片段:

db2 update db cfg for dbname using dbheap 41599

db2 update db cfg for dbname using catalogcache_sz 38049

db2 update db cfg for dbname using logbufsz 256

db2 update db cfg for dbname using util_heap_sz 20000

db2 update db cfg for dbname using buffpage 1000

db2 update db cfg for dbname using sortheap 4096

db2 update db cfg for dbname using stmtheap 16384

db2 update db cfg for dbname using applheapsz 10242

對于非常復(fù)雜的數(shù)據(jù)庫,目標數(shù)據(jù)庫的日志參數(shù)還需要做出調(diào)整,以便在導(dǎo)入數(shù)據(jù)和生成數(shù)據(jù)對象時,系統(tǒng)不至于日志溢出。由于筆者要遷移的數(shù)據(jù)庫比較復(fù)雜,所以使用了較大的日志配置,命令示例如下:

清單 10. 命令示例

db2 update db cfg for dbname using logfilsiz 8192

db2 update db cfg for dbname using mincommit 1

db2 update db cfg for dbname using logprimary 24

db2 update db cfg for dbname using logsecond 108

6. 導(dǎo)入源數(shù)據(jù)集

細心的讀者可能會發(fā)現(xiàn),這里總結(jié)的步驟6和8看似不太符合一般的邏輯順序。對于數(shù)據(jù)庫系統(tǒng),通常都是先生成數(shù)據(jù)系統(tǒng)對象,如表,視圖,觸發(fā)器等,然后再導(dǎo)入數(shù)據(jù)集。而上述步驟中卻是先導(dǎo)入數(shù)據(jù)集,然后再生成數(shù)據(jù)對象定義。 這能行的通嗎?對于DB2來說,這完全行得通,因為db2move命令在導(dǎo)入數(shù)據(jù)集時,會自動生成表和索引。這樣的順序?qū)τ趶?fù)雜數(shù)據(jù)對象定義的數(shù)據(jù)庫遷移是唯一可行的順序,因為復(fù)雜數(shù)據(jù)庫中往往包含諸多復(fù)雜的數(shù)據(jù)約束語句, 它們會造成數(shù)據(jù)集導(dǎo)入時的種種問題。

清單 11. 導(dǎo)入源數(shù)據(jù)集的命令示例

以下是引用片段:

db2move targetdbname

import -u

username

-p

password

如果數(shù)據(jù)量非常大,這個過程將會非常耗時。

7. 檢查數(shù)據(jù)集導(dǎo)入過程日志,排除可能的錯誤。

導(dǎo)入完成后,你需要檢查導(dǎo)入過程日志,查看有無錯誤發(fā)生。如果有錯誤,你需要找出解決方法,然后從步驟 5 重新開始。

8. 在目標系統(tǒng)執(zhí)行數(shù)據(jù)系統(tǒng)對象定義語句

修改步驟 4 生成的 ddl 語句文件,去除文件前端的數(shù)據(jù)庫連接語句,保存后執(zhí)行如下命令:

清單12. 命令示例

以下是引用片段:

db2 connect to targetdbname

user

username

using

password

db2 -tvf ddlfile > createSchema.log

db2 connect reset

9.檢查數(shù)據(jù)對象生成日志,排除可能的錯誤

通常你會發(fā)現(xiàn)有很多創(chuàng)建表的語句執(zhí)行失敗的記錄,不要緊張,這是正常的,因為前面的步驟中已經(jīng)生成了所有的用戶表。所以檢查的焦點應(yīng)該放在其他數(shù)據(jù)庫對象(如視圖和觸發(fā)器等)的生成語句上。 如果數(shù)據(jù)庫非常復(fù)雜,可能需要非常細致的檢查日志,以確保所有數(shù)據(jù)對象都正確創(chuàng)建。

10. 執(zhí)行后期檢查

通常,用戶可能碰到兩種需要處理的情況。其一,如果數(shù)據(jù)庫系統(tǒng)中有用 Java 編寫的存儲過程,那么需要注冊存儲過程的外部程序包。命令示例如下:

清單 13. 命令示例

以下是引用片段:

db2 call sqlj.install_jar ('jar_url','jar_id')

db2 drop procedure procedurename

db2 create procedure procedurename

external name '

jar_id:

classname' language java parameter style DB2GENERAL FENCED modifies sql data

db2 grant execute on procedure procedurename to public

其二,如果表定義中有數(shù)據(jù)庫管理的自動增長列,比如表定義語句含有 'GENERATED BY DEFAULT AS IDENTITY'。那么你需要更新這些列的起始計數(shù)。命令示例如下:

清單 14. 命令示例

以下是引用片段:

db2 alter table

tabname

alter column

colname

restart with

newstartnumber

這個 newstartnumber 的多少是要根據(jù)目前表中該列的最大值來定的,具體公式是 newstartnumber = currentmaxnumber + 1。

11. 配置應(yīng)用程序,連接數(shù)據(jù)庫,測試遷移是否成功。

上述就是完整的 db2 跨平臺數(shù)據(jù)庫遷移步驟,筆者使用的 db2 版本是 8.2。無論如何,數(shù)據(jù)庫遷移是個復(fù)雜的問題,其中難免有些情況筆者未曾遇到,歡迎有過類似經(jīng)驗的高手指教和共同討論。

主站蜘蛛池模板: 高清国产美女在线观看 | 干成人网| 一起色色| 国产人免费人成免费视频 | 91香蕉国产在线观看人员 | 国产精品黄页网站在线播放免费 | 国产精品亚洲欧美一区麻豆 | 亚洲人和日本人hd | 欧美日韩一区二区在线观看 | 精品国产免费一区二区 | 中文字幕色婷婷在线精品中 | 欧美一级视频在线高清观看 | 理论片 国产台湾在线 | 成人瑟瑟 | 一级生活片 | 久久精品呦女 | 国产高清国产专区国产精品 | 欧美成人免费全部观看在线看 | 18禁片一级毛片视频播放免费看 | 一级黄色片在线观看 | 亚洲综合久久久 | 国产日韩一区二区三区 | 97超精品视频在线观看 | 男女毛片 | 手机看片自拍自自拍日韩免费 | 免费在线一级片 | 日本亚洲乱码中文字幕影院 | 好黄好猛好爽好痛的视频 | 免费特黄一级欧美大片在线看 | 一级全免费视频播放 | 久久久久久91香蕉国产 | 亚洲成在人线影视天堂网 | 亚洲 欧美 日韩在线 | 国产一级大片 | 欧洲成人爽视频在线观看 | jiz欧美高清 | 国产精品视频福利一区二区 | 亚洲色图日韩 | 欧美视屏在线观看 | 91好色视频 | 精品美女视频在线观看2023 |