Oracleを使ったシステムの改修の仕事でサーバーに無償版のOracle 11g XEをインストールして、
先方から提供されたダンプファイルをインポートしたところ、
「ORA-12899: 列”XX”の値が大きすぎます(実際: XX、最大: XX)」といったエラーが頻発してしまいました。
インストールしたXEのデータベースキャラクタセットがUTF8だったのに元はSJISであることが原因でした。
データベースキャラクタセットの変更なんてコマンド1発だろうと思っていたらえらい大変でした。
ここを参考に(というかほぼそのまま)作業した内容を備忘のため書き留めておくことにします。
自分の環境に合わせて若干(ディレクトリ名等)変更しています。
■インスタンスの削除
>cleanup.bat (サービスの停止、インスタンスの削除をしてくれます)
■不要なファイルの削除
C:\oraclexe\app\oracle\product\11.2.0\server\dbs\* C:\oraclexe\app\oracle\product\11.2.0\server\database\*(oradba.exe以外) C:\oraclexe\app\oracle\oradata\XE\*
■インスタンスの作成
・以下をC:\oraclexe\app\oracle\product\11.2.0\server\database\initXE.oraとして保存
java_pool_size=4194304 large_pool_size=4194304 shared_pool_size=62914560 streams_pool_size=0 audit_file_dest='C:\oraclexe\app\oracle\admin\XE\adump' compatible='11.2.0.1.0' control_files='C:\oraclexe\app\oracle\oradata\XE\control.dbf' core_dump_dest='C:\oraclexe\app\oracle\admin\XE\cdump' db_name='XE' dispatchers='(PROTOCOL=TCP) (SERVICE=XEXDB)' job_queue_processes=2 open_cursors=300 os_authent_prefix='' pga_aggregate_target=40M remote_login_passwordfile='EXCLUSIVE' sessions=20 sga_target=140M shared_servers=1 undo_management='AUTO' undo_tablespace='UNDO'
・oradimユーティリティを実行し、インスタンスを作成
oradim -NEW -SID XE -SYSPWD manager -PFILE C:\oraclexe\app\oracle\product\11.2.0\server\database\initXE.ora
■インスタンス起動
>set ORACLE_SID=XE >sqlplus / as sysdba (アイドル・インスタンスに接続しました) SQL>startup nomount pfile=C:\oraclexe\app\oracle\product\11.2.0\server\database\initXE.ora (ORACLEインスタンスが起動しました)
・以下の内容をファイルC:\oraclexe\app\oracle\product\11.2.0\server\database\createDB.oraに保存
create database XE
logfile group 1 ('C:\oraclexe\app\oracle\oradata\XE\redo1.dbf') size 32M,
group 2 ('C:\oraclexe\app\oracle\oradata\XE\redo2.dbf') size 32M,
group 3 ('C:\oraclexe\app\oracle\oradata\XE\redo3.dbf') size 32M
character set JA16SJIS
national character set utf8
datafile 'C:\oraclexe\app\oracle\oradata\XE\system.dbf'
size 240M
autoextend on
next 16M maxsize unlimited
extent management local
sysaux datafile 'C:\oraclexe\app\oracle\oradata\XE\sysaux.dbf'
size 48M
autoextend on
next 8M
maxsize unlimited
undo tablespace undo
datafile 'C:\oraclexe\app\oracle\oradata\XE\undo.dbf'
size 48M
autoextend on
default temporary tablespace temp
tempfile 'C:\oraclexe\app\oracle\oradata\XE\temp.dbf'
size 8M
autoextend on;
■データベースを作成(sqlplus内)
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\database\createDB.ora (データベースが作成されました)
・カタログ定義スクリプトの実行
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\catalog.sql
・PL/SQLパッケージ作成スクリプトの実行(かなり時間がかかります)
SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\catproc.sql
・SYSTEMで接続し、PRODUCT_USER_PROFILE表に対するSELECT権限をPUBLICに付与
SQL>connect system/manager SQL>@C:\oraclexe\app\oracle\product\11.2.0\server\sqlplus\admin\pupbld.sql
■確認
SELECT PARAMETER, VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';
以上でした。
■追記:クライアントの文字コード
システム環境変数「NLS_LANG」の値として「JAPANESE_JAPAN.JA16SJISTILDE」とします。