Hatena::ブログ(Diary)

おかぼんの備忘録的日記 このページをアンテナに追加

2012-11-15

oracle 11g XE でキャラクタセットを変更した時のメモ

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」とします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/oka_bon/20121115/1352986471
リンク元