Oracle9iをOracle11gへ移行

Oracle9iをOracle11g環境へデータ移行しました。同じ機械でアップグレードするとするといろいろとややこしい手順があるのですが今回は別の機械へのデータ移行。
expで吐き出したファイルをimpで取り込むってのが基本方針なんですが、9iと11gとの間でいろいろと細かい差分があってちょいと苦労しました。

データベースは既にインストールされているものとして話をすすめます。

初期化ファイルを旧環境から移す

初期化ファイルを移動します。内容は少し変更する必要があります。10gか11gあたりから追加になったUNDO機能のために、undoの表領域を初期化ファイルに追記。以下二行を追加します。

undo_management=auto
undo_tablespace=undotbs

二行目に書いたのが、undoのためのテーブルスペース名。後でcreate databaseで同じ名前で指定します。
次にshared_pool_sizeを大きく。9iとは最低限のメモリ必要量がちがうようで最低でも325477990必要。今回はこのサイズに変更しました。

shared_pool_size = 325477990

最後。アーカイブモードが有効になっている場合のアーカイブファイルのファイル名指定が少し変更になっていて、%t,%s,%rの三つが入ってないといけない模様。9iまでは%tと%sだけでもOKでした。

log_archive_format = %t_%s_%r.dbf

必要なディレクトリを作成する

これから作成するOracleインスタンスが使用するディレクトリを作成。今回は/export/home/data以下に全部つくりました。

# mkdir -p /export/home/data/{cdump,bdump,udump,control1,control2,arch,log1,log2}
# chown -R oracle:dba /export/home/data

コントロールファイル、アーカイブファイルの場所は上記の初期化ファイルとあわせます。

データベースをnomountでスタート

ここまでやったところでsqlplusでインスタンスをnomountでスタート。

$ sqlplus /nolog
SQL*Plus: Release 11.1.0.6.0 - Production on 火 11月 4 19:35:41 2008

Copyright (c) 1982, 2007, Oracle.  All rights reserved.
SQL> conn system/manager as sysdba
アイドル・インスタンスに接続しました。
SQL> startup nomount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLEインスタンスが起動しました。

Total System Global Area  626548736 bytes
Fixed Size                  2088584 bytes
Variable Size             352321912 bytes
Database Buffers          268435456 bytes
Redo Buffers                3702784 bytes
SQL>

なんかエラーがでてるな。今度調べよう。

databaseを作成する。

以下のSQLコマンドでデータベースを作成。9iと違うのは以下の点。

  • sysauxを指定する。system表領域の補助らしい。
  • undo表領域を指定する。undo機能ってなんだろ。これも後で調べよう。
  • logファイルのサイズが9iでは2Mでよかったんだけど、最低でも4M必要らしい。今回は8Mで指定。
  • データファイルのファイルサイズも最低限が大きくなったみたい。ディスク容量に糸目をつけずunlimitedを指定するのが吉。

こんなSQLコマンドでデータベースを作成しました。

create database data controlfile reuse
logfile
group 1 ('/export/home/data/log1/redo0101.log','/export/home/data/log1/redo0102.log') size 8M ,
group 2 ('/export/home/data/log2/redo0201.log','/export/home/data/log2/redo0202.log') size 8M
maxlogfiles 40
datafile '/export/home/data/systemdata/system01.dbf' size 180357129 autoextend on next 30M
sysaux datafile '/export/home/data/systemdata/sysaux.dbf' size 1048578048 autoextend on next 30M
undo tablespace "undotbs" datafile '/export/home/data/systemdata/undotbs.dbf' size 1048578048 autoextend on next 30M
maxsize unlimited
maxdatafiles 240
character set ja16sjis 

必要なテーブルスペースを準備する

移行もとのデータベースのdba_data_fileやv$datafileなんかを参照して必要なテーブルスペースとデータファイルのセットを準備します。

create tablespace testdata datafile '/export/home/data/testdata.dbf' size 1000M autoextend on next 10M maxsize 5000M;
create tablespace userdata datafile '/export/home/data/userdata.dbf' size 300m autoextend on next 10M maxsize 1000M;

シノニムやらを作成

$ORACLE_HOME/rdbms/admin/以下にあるcatalog.sql,catspace.sql,catproc.sqlをSQLplusから実行します。ちょいと時間がかかります。

あとはimportすればいいはずなんだけど、なんかエラーがいっぱいでてるな。。ユーザが移ってないのか。。続報は明日。