Database Migration

Database Migration là một trong những công việc thường gặp của DBA (Hôm trước mình cũng bị hỏi câu này :)). Thông thường, khi đi triển khai, thường là mình mang một database có sẵn đến site của khách hàng, deploy vào rồi sau đó mới chỉnh sửa data theo yêu cầu.

Ở SQL Server thông thường có 2 cách.

  • Một là backup database ra file bak sau đó restore trên máy khác.
  • Hai là shutdown database sau đó copy file mdf và ldf rồi attach trên máy mới là ta có thể có 1 database tương tự như source.
  • Ngoài ra có thể có một số third-party hỗ trợ, nhưng ít dùng vì 2 cách trên vừa đơn giản vừa dễ dùng.

Tất nhiên vì là đồ M$ nên chuyện multi platform là no-table.

Ở Oracle thì có nhiều giải pháp hơn. Và cũng thường ít khi phải care đến vấn đề OS. Chúng ta có thể xem xét một số giải pháp như:

  • Export/Import: export ra file dump, sau đó dùng import lại. Đây là một trong những cách hay được sử dụng nhất vì tương đối đơn giản lại khá mạnh, không phụ thuộc vào OS. Bạn có thể export trên máy chạy Windows sau đó import trên máy chạy Linux/Unix mà không ảnh hưởng gì đến dữ liệu bên trong. Tuy nhiên nó chỉ chạy được với điều kiện database size cỡ GB, chứ lên đến TB thì không khả thi (@Saravanan Shanmugan – OCM & James Madison – PM and Application Architect for Migration)
  • Data Pump: Phiên bản nâng cấp của Export/Import, bắt đầu có từ phiên bản Oracle 10g. Data Pump chạy nhanh hơn và có một số cải tiến như dùng tablespace metadata để thực hiện các thao tác migrate thông qua network link, rồi khả năng restart job… Nói chung, do sinh sau đẻ muộn nên nó kế thừa đầy đủ các tính năng của Export và Import ở cấp độ mạnh hơn tương đối. Tuy nhiên, khi đối mặt với dữ liệu cỡ TB thì chú này cũng khóc. Thí nghiệm của Saravanan và James: 15GB thì datapump hết 11 mins, tuy nhiên 7 TB thì hết những 93 hours 😦 trên cùng một cấu hình phần cứng
  • CTAS (Create table as Select): Cách này cũng được nhưng không thích hợp với vai trò của DBA vì phải tìm hiểu cấu trúc database (diagram, schema…) quá nhiều. Quên mất, cái này cũng có thể dùng với MS, nhưng ít người làm theo cách này
  • Third –party: chung số phận với third party của MS
  • Transportable tablespace (TTS): Tên đầy đủ là Cross Platform Transportable Tablespace Technology XTTS. Đây là một trong những feature mình muốn nói đến nhất trong chủ đề này. Khi bạn có một yêu cầu migration một database cỡ vài TB trong một thời gian ngắn, thì đây chính là giải pháp tối ưu nhất. Cơ chế hoạt động của công nghệ này như sau:
    • Set source tablespace về Read only
    • Dùng RMAN để copy các tablespace đến target database. Nếu có sự khác nhau về endian format, sử dụng lệnh RMAN Convert để chuyển đổi.
    • Thực hiện các thao tác để đưa các tablespace này vào target database
    • Set cả source lẫn target về trạng thái bình thường (Read Write )

Công nghệ này đã có từ phiên bản Oracle 8i, nhung khi đó chỉ cho phép move giữa các Oracle database có cùng data block size và cùng platform. Sang version 9i, Oracle khắc phục được điểm cùng block size, tuy nhiên vẫn chỉ cho phép move trên cùng platform.  Và ở phiên bản 10g, Oracle phá bỏ được cái Barrie cuối cùng này bằng cách sử dụng công nghệ Cross Platform TTS.

Ưu điểm của công nghệ này là:

  • Move tablespace giữa các heterogeneous OS
  • XTTS chỉ là high-level copy of data
  • Giảm thiểu lỗi thiếu bảng hoặc thiếu dữ liệu. nó chỉ có trạng thái: hoặc là thành công, hoặc là thất bại, không có trường hợp thiếu
  • K cần rebuild lại indexes
  • Endian convert nếu có chỉ chậm hơn 3% so với thao tác copy của OS
  • Không cần recollect các statistic

Nói chung giải pháp TTS tương đối hay, tuy nhiên theo ý của mình, DBA nên cưng cứng 1 tý thì khả thi hơn. Cũng không nhất thiết lúc nào cũng phải dùng giải pháp này, nếu dữ liệu vừa vừa thì nên dùng Exp/Imp hoặc Expdp/Impdp.

Trên đây mình đề cập đến 2 trong số database hay được sử dụng là MS SQL Server và Oracle. Còn DB2 của IBM thì mình sẽ nghiên cứu và cập nhật sau. 🙂

30 Aug 2010

HN

References:
1. Oracle Cross Platform Transportable Tablespace
http://www.oracle.com/technology/deploy/availability/htdocs/xtts.htm
2. Oracle Recovery Manager – RMAN
http://www.oracle.com/technology/deploy/availability/htdocs/rman_overview.htm
3. Data Pump
http://www.oracle.com/technology/products/database/utilities/htdocs/data_pump_overview.html
4. RMAN CONVERT command
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10770/rcmsynta18.htm#RCMRF200
5. Using Transportable Tablespace
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10739/tspaces.htm – ADMIN01101

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: