今天發現一個Oracle測試庫的字元集設定不正確,原本的字元集是UTF-8,正確的字元集應該是 ZHS16GBK,因為UTF-8是ZHS16GBK的超集,無法修改,只能重建資料庫,幸好該測試庫上還沒有資料。
雖然用DBCA也可以建立資料庫,但我個人更喜歡手工建立資料庫,其主要步驟如下(資料庫版本 11.2):
1. 設定ORACLE_SID
預設的ORACLE_SID是orcl,我個人強烈建議起個唯一、且意義的名字,比如**testdb,**proddb等 等,在Oracle使用者下執行:
export ORACLE_SID=lxdbtest
2. 重建PFILE
在$ORACLE_HOME/dbs目錄下重建pfile(initORACLE_SID.ora,本例為initlxdbtest.ora),除了以 下三個參數,其它參數都可以不用設定(使用預設值):
db_name=lxdbtest control_files='/home/oracle/app/oradata/lxdbtest/control01.ctl','/home/oracle/app/oradata/lxdbtest/control02.ctl','/home/oracle/app/oradata/lxdbtest/control03.ctl' memory_target=2G
為了安全起見,控制檔案一定要指定多份,在生產庫上,要把它們分開放在不同的物理磁碟上,這 裡因為是測試庫,所以才放在同一個磁碟上。
3. 啟動執行個體至nomount狀態
有了pfile就可以啟動執行個體至nomount狀態了:
$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 21:01:16 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2215064 bytes Variable Size 1224737640 bytes Database Buffers 905969664 bytes Redo Buffers 4964352 bytes SQL>
4. 執行CREATE DATABASE語句
CREATE DATABASE lxdbtest LOGFILE GROUP 1 ('/home/oracle/app/oradata/lxdbtest/redo01a.log','/data/oradata/lxdbtest/redo01b.log') SIZE 100M BLOCKSIZE 512, GROUP 2 ('/home/oracle/app/oradata/lxdbtest/redo02a.log','/data/oradata/lxdbtest/redo02b.log') SIZE 100M BLOCKSIZE 512, GROUP 3 ('/home/oracle/app/oradata/lxdbtest/redo03a.log','/data/oradata/lxdbtest/redo03b.log') SIZE 100M BLOCKSIZE 512 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 600 CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 EXTENT MANAGEMENT LOCAL DATAFILE '/home/oracle/app/oradata/lxdbtest/system01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF SYSAUX DATAFILE '/home/oracle/app/oradata/lxdbtest/sysaux01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF DEFAULT TABLESPACE users DATAFILE '/home/oracle/app/oradata/lxdbtest/users01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF DEFAULT TEMPORARY TABLESPACE temptbs TEMPFILE '/home/oracle/app/oradata/lxdbtest/temp01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF UNDO TABLESPACE undotbs DATAFILE '/home/oracle/app/oradata/lxdbtest/undotbs01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF;