4

Is there anyway to restore a db2 database whose backup was made in Windows XP , to a linux machine ? I am using the same version of db2 on both the OSes -> DB2 Express-C 9.7 Source OS : Windows XP SP2 Target OS : Ubuntu 9.04

Manish Mathai
  • 163
  • 1
  • 2
  • 5

1 Answers1

8

IBM has documentations for this scenario. See this page on DeveloperWorks: Using DB2 utilities to clone databases across different platforms

Summary: Two DB2 utilities, db2move and db2look, can be used to clone databases when there is no support for cross-platform backup and restore operations. This article provides an overview of these utilities and gives a step-by-step example of how to clone a DB2 database using this approach.

I've used already a similar procedure (involving db2move) to transfer a DB2 database from Windows to AIX and vice-versa.

Introduction

DB2’s native backup utility creates a backup image that is not portable from W2K to AIX or back. This document presents the procedures required for moving any DB2 database from one platform to the other.

Assumptions

For purposes of example, this document assumes that the database to be ported from W2K (source platform) to AIX (target platform) is MYDB.

Procedure Details

Run the db2look command for MYDB database to generate the DDL for the MYDB database.

db2look -d mydb -e –l –x -o mydb_create.sql

Create a directory in which to store the logical backup of the source database MYDB.

mkdir backup

Change to the new directory, and create the logical backup using the db2move utility

cd backup
db2move mydb export

Transfer the backup of the database and DDL script from Source to Destination. Transfer mydb_create.sql in ASCII mode, and all backup*.ixf files in binary mode.

The following steps are to be performed on the target platform.

Split the mydb_create.sql script into two scripts. The first is named mydb_tables.sql, and should contain all alias, table, and view creation commands. The second script is to be named mydb_ri.sql, and picks up where the first stopped, including check and foreign key constraints and grants. Make sure that both scripts have a CONNECT command at the top, and COMMIT, CONNECT RESET, and TERMINATE commands at the end.

Edit the mydb_tables.sql and ensure that any user tablespaces use only relative path names. If absolute path names are used, the database cannot be restored multiple times on the same system without a REDIRECTED RESTORE.

Create an empty MYDB database.

create db mydb

Run the mydb_tables.sql script to create aliases, tables, and views.

db2 –tvf mydb_tables.sql > mydb_tables.out

Review mydb_tables.out for errors. An easy method of doing this is to run the following command.

grep SQL0 mydb_tables.out|grep –v SQL0403W|grep –v SQL0598W|more

Import the data to the tables (the INSERT option can be used instead of REPLACE, but REPLACE is rerunnable).

db2move mydb load -lo replace

Run the mydb_ri.sql script to create referential integrity constraints, etc.

db2 –tvf mydb_ri.sql > mydb_ri.out

Review mydb_ri.out for errors. An easy method of doing this is to run the following command.

grep SQL0 mydb_ri.out|grep –v SQL0403W|grep –v SQL0598W|more

Verify that the source and target databases are identical.

Snark
  • 181
  • 5
  • Would this work for tables with IDENTITY GENERATED ALWAYS columns ? –  Dec 24 '09 at 14:05
  • pff can't remember for sure, I haven't "played" with DB2 for years, sorry. – Snark Dec 24 '09 at 14:07
  • Special care is needed for IDENTITY GENERATED ALWAYS columns as specified in this IBM article : http://www.ibm.com/developerworks/data/library/techarticle/0205pilaka/0205pilaka2.html – Steve Schnepp Dec 28 '10 at 10:48