Đối với tất cả các kịch bản khác, ví dụ, di chuyển dữ liệu từ một cơ sở dữ liệu tới DB2 cho z/OS, công cụ này hỗ trợ MTK rất nhiều trong lĩnh vực di chuyển dữ liệu tốc độ cao.. C:\> db2s
Trang 1Công cụ di chuyển dữ liệu sang IBM
Di chuyển dữ liệu từ các cơ sở dữ liệu nguồn tới DB2 theo cách dễ dàng
Vikram S Khatri, Chuyên gia tư vấn Công nghệ thông tin có chứng chỉ, IBM
Tóm tắt: Bài viết này trình bày một công cụ rất đơn giản và mạnh mẽ để di
chuyển (migration) dữ liệu từ nhiều nguồn khác nhau một cách dễ dàng Công cụ này cho phép các ứng dụng từ Oracle và Sybase chạy trên DB2® phiên bản 9.7 của IBM®, cho Linux®, UNIX® và Windows® như nó vốn có, với thay đổi rất ít hoặc không cần thay đổi gì Công cụ này cũng có thể được sử dụng để di chuyển
dữ liệu từ nhiều hệ thống quản lý cơ sở dữ liệu khác nhau sang DB2 cho Linux, UNIX và Windows và DB2 cho z/OS® Công cụ này cũng hỗ trợ di chuyển dữ liệu từ một cơ sở dữ liệu nguồn tới DB2 trong một môi trường pureScale
Đối với tất cả các kịch bản khác, ví dụ, di chuyển dữ liệu từ một cơ sở dữ liệu tới DB2 cho z/OS, công cụ này hỗ trợ MTK rất nhiều trong lĩnh vực di chuyển dữ liệu tốc độ cao Khi sử dụng công cụ này, nhiều hơn 4TB dữ liệu đã được di chuyển chỉ trong ba ngày
Trang 2Công cụ này có giao diện GUI dễ sử dụng với người mới bắt đầu, trong khi người dùng cao cấp thường ưa thích dùng API dòng lệnh
Chuẩn bị
Tải về
Trước tiên, tải về công cụ này từ phần Tải về vào máy chủ DB2 đích của bạn Để
di chuyển dữ liệu tới DB2 cho z/OS cần các bước bổ sung thêm (Kiểm tra phiên bản hiện có mới nhất của công cụ này.)
Cài đặt
Một khi bạn đã tải về tệp IBMDataMovementTool.zip, hãy trích xuất các tệp này
vào một thư mục tên là IBMDataMovementTool trên máy chủ DB2 đích của bạn
Chúng tôi khuyên bạn nên cài đặt phía máy chủ (trên DB2) để đạt được hiệu năng
di chuyển dữ liệu tốt nhất
Các điều kiện tiên quyết
DB2 V9.7 nên được cài đặt trên máy chủ đích của bạn nếu bạn đang bật lên một ứng dụng Oracle để chạy trên DB2 cho Linux, UNIX và Windows
Java™ phiên bản 1.5 hoặc cao hơn phải được cài đặt trên máy chủ đích của bạn Để kiểm tra phiên bản Java hiện tại của bạn, hãy chạy lệnh java -
version Theo mặc định, Java được cài đặt như một phần của DB2 cho Linux, UNIX và Windows trong <install_dir>\SQLLIB\java\jdk
(Windows) or /opt/ibm/db2/V9.7/java/jdk (Linux)
Bảng 1 Nơi đặt các trình điều khiển JDBC cho cơ sở dữ liệu nguồn và DB2 của bạn
Trang 3Cơ sở dữ liệu Các trình điều khiển JDBC
Oracle
ojdbc5.jar hoặc ojdbc6.jar hoặc ojdbc14.jar, xdb.jar, xmlparserv2.jar hoặc classes12.jar hoặc classes111.jar for Oracle 7 hoặc 8i
SQL Server sqljdbc5.jar hoặc sqljdbc.jar
Sybase jconn3.jar và antsjconn2.jar cho tính năng DB2 SKIN
MySQL mysql-connector-java-5.0.8-bin.jar hoặc trình điều khiển mới
Trang 4MS Access Tùy chọn Access_JDBC30.jar
Thiết lập môi trường
UNIX: Đăng nhập vào máy chủ của bạn như là chủ sở hữu cá thể (instance) DB2
Windows: Khởi chạy một cửa sổ lệnh DB2
Chuyển đến thư mục IBMDataMovementTool Công cụ này là một tệp
JAR có hai kịch bản lệnh của trình điều khiển để chạy công cụ này
IBMDataMovementTool.cmd - Command script to run the tool on Windows IBMDataMovementTool.sh - Command script to run the tool on UNIX IBMDataMovementTool.jar - JAR file of the tool
Pipe.dll - A DLL required on Windows if pipe option is used
Tạo cơ sở dữ liệu đích DB2
Do cần một kết nối cơ sở dữ liệu tới đích để chạy công cụ này, nên cơ sở dữ liệu DB2 phải được tạo ra đầu tiên Trên DB2 V9.7, chúng tôi khuyên bạn nên sử dụng lưu trữ tự động mặc định và chọn kích thước trang 32KB Khi cho phép các ứng dụng được chạy trên DB2 V9.7, cá thể và cơ sở dữ liệu phải đang hoạt động trong
Trang 5chế độ tương thích Cũng nên điều chỉnh hành vi làm tròn để khớp với cơ sở dữ liệu đó của Oracle Bạn có thể triển khai các đối tượng ngoài thứ tự phụ thuộc bằng cách thiết lập ngữ nghĩa xác nhận lại hợp lệ là deferred_force
$ db2 "create db testdb automatic storage yes on /db2data1,
/db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K"
$ db2 update db cfg for testdb using auto_reval deferred_force
$ db2 update db cfg for testdb using decflt_rounding round_half_up
Trên các hệ thống Windows
C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
C:\> db2stop force
Trang 6C:\> db2start
C:\> db2 "create db testdb automatic storage yes on C:,D: DBPATH ON E:
PAGESIZE 32 K"
C:\> db2 update db cfg for testdb using auto_reval deferred_force
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up
Trích xuất các đối tượng và dữ liệu
Trước khi bạn chạy công cụ này, có sẵn thông tin sau đây cho máy chủ nguồn và máy chủ DB2 của bạn:
Địa chỉ IP hoặc Tên máy chủ (Host Name) của các máy chủ nguồn và các máy chủ DB2
Các số cổng kết nối
Tên của các cơ sở dữ liệu, SID, tên hệ thống con v.v khi cần
Một mã định danh người dùng (User ID) với các đặc quyền của quản trị viên cơ sở dữ liệu (DBA) trên cơ sở dữ liệu nguồn
Mật khẩu cho người dùng đó
Nơi đặt cơ sở dữ liệu nguồn và trình điều khiển DB2 JDBC của bạn
Có đủ thông tin về dung lượng hoặc khối lượng/điểm lắp đặt tại nơi dữ liệu
sẽ được lưu trữ
Trang 7Chạy IBMDataMovementTool.cmd trên Windows hoặc
./IBMDataMovementTool.sh trên UNIX Công cụ này sẽ bắt đầu một GUI nếu máy chủ có khả năng hiển thị đồ họa Nếu không nó sẽ chuyển sang chế độ dòng lệnh tương tác để thu thập đầu vào
Bây giờ bạn sẽ thấy một cửa sổ GUI (Giao diện đồ họa người dùng) Một số thông báo cũng sẽ xuất hiện trong cửa sổ trình vỏ (shell) Hãy xem qua các thông báo này để đảm bảo không có lỗi nào được ghi nhật ký trước khi bạn bắt đầu sử dụng GUI
Trang 8Nếu bạn chưa thiết lập DB2_COMPATIBILITY_VECTOR, công cụ này sẽ đưa ra một cảnh báo Hãy làm theo các bước sau để thiết lập vector tương thích nếu bạn vẫn chưa làm như vậy
[2010-01-10 17.08.58.578] INPUT Directory =
[2010-01-10 17.08.58.578] Configuration file loaded: 'jdbcdriver.properties'
[2010-01-10 17.08.58.593] Configuration file loaded: 'IBMExtract.properties'
[2010-01-10 17.08.58.593] appJar :
'C:\IBMDataMovementTool\IBMDataMovementTool.jar'
[2010-01-10 17.08.59.531] DB2 PATH is C:\Program Files\IBM\SQLLIB
[2010-01-10 17.35.30.015] *** WARNING *** The
DB2_COMPATIBILITY_VECTOR is not set
[2010-01-10 17.35.30.015] To set compatibility mode, discontinue this program and
run the following commands
[2010-01-10 17.35.30.015] db2set DB2_COMPATIBILITY_VECTOR=FFF [2010-01-10 17.35.30.015] db2stop force
[2010-01-10 17.35.30.015] db2start
Trang 9Sử dụng giao diện người dùng đồ họa
Màn hình giao diện người dùng đồ họa (GUI) như trong Hình 1 có các trường để xác định thông tin kết nối cơ sở dữ liệu nguồn và cơ sở dữ liệu DB2 Chuỗi các sự kiện trong màn hình này là:
1 Chỉ rõ thông tin kết nối nguồn và DB2
2 Nhấn vào Connect to Oracle (Kết nối với Oracle) để kiểm tra kết nối
3 Nhấn vào Connect to DB2 (Kết nối với DB2) để kiểm tra kết nối
4 Chỉ rõ thư mục làm việc để trích xuất DDL và dữ liệu vào đó
5 Chọn cái bạn muốn giữa DDL và/hoặc Dữ liệu Nếu bạn chỉ chọn DDL, một kịch bản lệnh genddl bổ sung sẽ được tạo ra
6 Nhấn vào nút Extract DDL/Data (Trích xuất DDL/Dữ liệu) Bạn có thể
theo dõi tiến trình trong cửa sổ bàn điều khiển
7 Sau khi hoàn thành trích xuất dữ liệu thành công, hãy xem xét kỹ các tệp đầu ra kết quả với các trạng thái về dịch chuyển dữ liệu, các cảnh báo, các lỗi và các vấn đề tiềm năng khác
8 Theo tùy chọn, bạn có thể nhấn vào nút View Script/Output (Xem Kịch
bản lệnh/Đầu ra) để kiểm tra các kịch bản lệnh, DDL, dữ liệu hoặc tệp bản ghi nhật ký kết quả đầu ra được tạo ra
9 Nhấn vào nút Deploy DDL/Data (Triển khai DDL/Dữ liệu) để tạo ra các
bảng, các chỉ mục trong DB2 và nạp dữ liệu đã được trích xuất từ cơ sở dữ liệu nguồn
Trang 1010 Bạn có thể sử dụng Execute DB2 Script (Thực hiện Kịch bản lệnh DB2 )
để chạy các kịch bản lệnh DB2 được tạo ra thay vì chạy nó từ dòng lệnh Việc di chuyển dữ liệu là một hành động tương tác Nếu bạn cần hủy bỏ tất
cả các bảng trước khi bạn bắt đầu làm mới, bạn có thể chọn kịch bản lệnh bảng hủy bỏ và thực hiện nó Bạn cũng có thể sử dụng nút này để thực hiện các kịch bản lệnh theo thứ tự mà bạn muốn thực hiện chúng
Hình 1 Các tham số đầu vào cho cơ sở dữ liệu nguồn và DB2
Sau khi nhấn vào nút Extract DDL/Data, bạn sẽ nhận thấy các thông báo của công cụ trong thẻ View File (Xem tệp), như trong Hình 2:
Trang 11Hình 2 Trích xuất DDL và Dữ liệu
Sau khi hoàn thành việc trích xuất DDL và Dữ liệu, bạn sẽ nhận thấy một số tệp mới được tạo ra trong thư mục làm việc Có thể sử dụng những tệp này tại dòng lệnh để chạy trong DB2
Các tệp cấu hình
Các kịch bản lệnh sau đây được tạo mỗi khi bạn chạy công cụ này trong chế độ GUI Tuy nhiên, bạn có thể sử dụng các kịch bản lệnh này để thực hiện tất cả các bước di chuyển dữ liệu mà không có GUI Điều này có ích khi bạn muốn nhúng công cụ này như là một phần của một khối xử lý để thực hiện di chuyển dữ liệu tự động
Bảng 2 Các kịch bản lệnh
Trang 12Tên tệp Mô tả
IBMExtract.properties
Tệp này chứa tất cả tham số đầu vào mà bạn đã chỉ định thông qua các giá trị đầu vào GUI hoặc dòng lệnh của bạn Bạn có thể tự tay chỉnh sửa tệp này để thay đổi hoặc
sửa chữa các tham số Lưu ý: Tệp này bị ghi đè mỗi khi
bạn chạy GUI này
unload
Kịch bản lệnh này do công cụ này tạo ra Nó tải lên dữ liệu từ máy chủ cơ sở dữ liệu nguồn đến các tệp phẳng, khi bạn đánh dấu chọn tùy chọn DDL và Dữ liệu Kịch bản lệnh tương tự cũng chuyển dữ liệu từ cơ sở dữ liệu nguồn đến DB2 bằng cách sử dụng các đường ống, khi bạn đánh dấu chọn tùy chọn pipe (đường ống) trong GUI
để loại bỏ các tệp phẳng trung gian Tùy chọn đường ống này được điều khiển thông qua tùy chọn usePipe (sử dụng đường ống) trong tệp IBMExtract.properties
rowcount
Kịch bản lệnh này do công cụ này tạo ra và bạn có thể chạy nó sau khi triển khai dữ liệu để kiểm tra số đếm hàng (rowcount) trong cơ sở dữ liệu nguồn và DB2
Trang 13Hình 3 Các tệp được tạo ra sau khi trích xuất dữ liệu
Sử dụng chế độ dòng lệnh
Trang 14Bạn có thể chạy công cụ này bằng cách sử dụng cụ thể chế độ dòng lệnh khi
không có sẵn khả năng GUI Công cụ này chuyển đổi tự động các chế độ khi nó không thể khởi động GUI Nếu bạn muốn bắt buộc chạy công cụ này trong chế độ tương tác dòng lệnh, thì bạn có thể chỉ rõ tùy chọn -console cho lệnh
Bạn sẽ được giới thiệu các tùy chọn tương tác để xác định các tham số kết nối cơ
sở dữ liệu nguồn và DB2 theo tiến trình từng bước một Một đầu ra ví dụ từ cửa sổ bàn điều khiển được thể hiện như sau:
[2010-01-10 20.08.05.390] INPUT Directory =
[2010-01-10 20.08.05.390] Configuration file loaded: 'jdbcdriver.properties'
[2010-01-10 20.08.05.390] Configuration file loaded: 'IBMExtract.properties' [2010-01-10 20.08.05.390] appJar :
Trang 15'C:\IBMDataMovementTool\IBMDataMovementTool.jar' Debug (Yes) : 1
Debug (No) : 2
Enter a number (Default=2) :
IS TARGET DB2 LOCAL (YES) : 1
IS TARGET DB2 REMOTE (NO) : 2
Enter a number (Default=1) :
Extract DDL (Yes) : 1
Extract DDL (No) : 2
Enter a number (Default=1) :
Extract Data (Yes) : 1
Extract Data (No) : 2
Enter a number (Default=1) :
Enter # of rows limit to extract (Default=ALL) :
Enter # of rows limit to load data in DB2 (Default=ALL) : Compress Table in DB2 (No) : 1
Compress Table in DB2 (YES) : 2
Trang 16Enter a number (Default=1) :
Compress Index in DB2 (No) : 1
Compress Index in DB2 (YES) : 2
Enter a number (Default=1) : ******* Source database information: ***** Oracle : 1
MS SQL Server : 2
Sybase : 3
MS Access Database : 4
MySQL : 5
PostgreSQL : 6
DB2 z/OS : 7
DB2 LUW : 8
Enter a number (Default 1) : DB2 Compatibility Feature (DB2 V9.7 or later) : 1 No Compatibility feature : 2
Enter compatibility feature (Default=1) :
Trang 17Triển khai các đối tượng và nạp dữ liệu
Tạo các đối tượng đích cơ sở dữ liệu
Sau khi trích xuất DDL và Dữ liệu, bạn có ba cách khác nhau để triển khai các đối tượng đã trích xuất trong DB2
Nhấn nút Deploy DDL/DATA từ màn hình GUI
Chuyển đến thẻ Interactive Deploy ( Triển khai tương tác) và triển khai
các đối tượng theo tiến trình từng bước một
Triển khai DDL/DATA bằng kịch bản lệnh dòng lệnh db2gen
Các tùy chọn để chọn triển khai dữ liệu được dựa trên các yêu cầu di chuyển dữ liệu và các đối tượng Nếu bạn chỉ đang di chuyển các đối tượng DDL và Dữ liệu không phải PL/SQL, thì việc sử dụng kịch bản lệnh db2gen hoặc nhấn vào nút Deploy DDL/DATA từ các GUI là đủ
Tùy chọn triển khai tương tác có thể là sự lựa chọn tốt hơn của bạn khi bạn cũng đang triển khai các đối tượng PL/SQL như các trigger, các hàm, các thủ tục và các gói PL/SQL
Sử dụng màn hình GUI, như trong Hình 4, để triển khai tương tác của DDL và các đối tượng cơ sở dữ liệu khác Chuỗi các sự kiện trong màn hình này là:
1 Bảo đảm bạn được kết nối tới DB2 khi sử dụng thẻ Extract/Deploy (Trích
xuất/Triển khai)
2 Nhấn vào thẻ Interactive Deploy (Triển khai tương tác)
Trang 183 Sử dụng nút Open Directory (Mở thư mục) để chọn thư mục làm việc có
chứa các đối tượng đã trích xuất trước Các đối tượng này được đọc và được liệt kê trong một khung nhìn dạng cây
4 Bạn có thể triển khai tất cả các đối tượng bằng cách nhấn nút Deploy All Objects (Triển khai tất cả các đối tượng) trên thanh công cụ Hầu hết các
đối tượng sẽ triển khai thành công trong khi các đối tượng khác có thể hỏng
5 Khi bạn nhấn vào một đối tượng đã không triển khai được trong khung nhìn dạng cây, bạn có thể xem nguồn gốc của đối tượng đó trong cửa sổ của trình soạn thảo Lý do của sự thất bại này được liệt kê trong bản ghi nhật ký triển khai dưới đây
6 Chế độ tương thích Oracle nói chung cho phép triển khai các đối tượng như
nó vốn có Tuy nhiên, có thể vẫn có các tính năng không được hỗ trợ ngăn
cản triển khai thành công một vài đối tượng có sẵn Khi sử dụng trình soạn thảo bạn có thể điều chỉnh mã nguồn của các đối tượng này để giải quyết bất cứ các vấn đề nào Khi bạn triển khai đối tượng đã thay đổi, nguồn mới được lưu cùng với một sao lưu dự phòng của nguồn cũ
7 Bạn có thể chọn một hoặc nhiều đối tượng bằng cách sử dụng phím CTRL
và nhấn vào nút Deploy Selected Objects (Triển khai các đối tượng đã
chọn) trên thanh công cụ để triển khai các đối tượng sau khi đã chỉnh sửa chúng Thông thường các lỗi triển khai xảy ra theo dạng xếp tầng có nghĩa
là một khi một đối tượng đã triển khai thành công thì các đối tượng khác phụ thuộc vào nó cũng sẽ triển khai được
8 Lặp lại bước từ 5 đến 7 cho đến khi tất cả các đối tượng đã được triển khai thành công
Trang 19Hình 4 Triển khai tương tác của các đối tượng
So sánh các số đếm hàng
Chuyển tới thư mục gốc về di chuyển dữ liệu và chạy kịch bản lệnh
rowcount (số đếm hàng)
Bạn sẽ thấy một bản ghi được tạo ra trong tệp "<source database
name>.tables.rowcount" Bản ghi này chứa các số đếm hàng từ cả hai cơ sở
dữ liệu nguồn và đích
oracle : db2
"TESTCASE"."CALL_STACKS" : 123 "TESTCASE"."CALL_STACKS" :
Trang 20123
"TESTCASE"."CLASSES" : 401 "TESTCASE"."CLASSES" : 401
"TESTCASE"."DESTINATION" : 513 "TESTCASE"."DESTINATION" :
513
Sử dụng các đường ống để di chuyển dữ liệu
Khi kích thước cơ sở dữ liệu nguồn quá lớn và không đủ dung lượng để giữ các tệp dữ liệu trung gian, việc sử dụng đường ống là cách được khuyên dùng để di chuyển dữ liệu
1 Chỉ rõ # Extract Rows=1 trong GUI hoặc thiết lập LimitExtractRows=1
trong IBMExtract.properties, khi bạn đang sử dụng cửa sổ dòng lệnh
Trang 212 Nhấn vào nút Extract DDL/Data để tải lên dữ liệu hoặc chạy kịch bản lệnh
unload (tải lên) từ cửa sổ dòng lệnh
3 Nhấn nút Deploy DDL/Data hoặc chạy kịch bản lệnh db2gen từ cửa sổ
dòng lệnh
4 Chọn Use Pipe (Sử dụng đường ống) hoặc thiết lập usepipe=true trong
IBMExtract.properties, khi bạn đang sử dụng cửa sổ dòng lệnh
5 Nhấn nút Extract / Deploy through Pipe Load (Trích xuất/Triển khai
thông qua Nạp đường ống) hoặc kịch bản lệnh unload từ cửa sổ dòng lệnh
Hình 5 Sử dụng đường ống để di chuyển dữ liệu
Các bước bổ sung cho DB2 trên z/OS
Trang 22Tiến trình UNLOAD trên z/OS
Công cụ này đòi hỏi tệp USS để chạy nhưng DB2 LOAD trên z/OS không thể sử dụng các tệp HFS để nạp dữ liệu Đó là lý do, bạn cần sử dụng bộ công cụ JZOS để tạo ra các tập dữ liệu PS trên z/OS từ Các dịch vụ hệ thống Unix (Unix System Services) Tuy nhiên, DB2 LOAD có thể sử dụng các tệp USS (hoặc HFS) cho LOAD CLOBS/BLOBS trong DB2 Đó là lý
do, chúng ta tạo ra các tập dữ liệu PS trên z/OS để di chuyển dữ liệu từ cơ
sở dữ liệu nguồn tới z/OS và chúng ta sử dụng các tệp HFS của Các dịch vụ
hệ thống Unix để giữ tất cả BLOBS/CLOBS
Không thể chạy câu lệnh LOAD từ USS Sử dụng các thủ tục đã lưu
SYSPROC.DSNUTILS để chạy LOAD, CHECK DATA và RUN STATS
Tạo các tập dữ liệu PS là một thách thức do bạn cần phải cấp phát nó cho mỗi bảng Không thể cấp phát trước một kích thước cố định vì chưa biết được kích thước bảng Nó có thể lãng phí rất nhiều dung lượng trên z/OS
Để tránh vấn đề dung lượng, hãy sử dụng một thuật toán để cấp phát kích thước
Bạn có thể sử dụng công cụ này từ z/OS để thực hiện di chuyển dữ liệu từ một cơ
sở dữ liệu nguồn tới DB2 cho z/OS Tuy nhiên, cần có các bước bổ sung sau đây
1 Tải về và cài đặt JZOS
2 Đây là tệp nén chứa một tệp tên là jzos.pax Giao thức truyền tệp (FTP) truyền tệp này bằng cách sử dụng Các dịch vụ hệ thống Unix trong chế độ nhị phân tới thư mục mà bạn muốn cài đặt JZOS
3 Chuyển đến thư mục bạn đã lưu tệp pax ở đó