今天发现一个oracle测试库的字符集设置不正确,原本的字符集是utf-8,正确的字符集应该是zhs16gbk,因为utf-8是zhs16gbk的超集,无法修改,只能重建数据库,幸好该测试库上还没有数据。
参考阅读:
手动创建oracle数据库实例
手工创建oracle数据库
linux环境下手工创建oracle 10g数据库
虽然用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;
有几点需要注意:
1)每个日志文件组的日志要放在不同的物理磁盘上,万一有一个磁盘损坏,也不会丢失数据
2)根据需要选择合适的字符集
3)创建了5个基本的表空间:system,sysaux,默认表空间,默认临时表空间,默认undo表空间
5. 根据需要创建应用程序所需的表空间
对于关键业务的数据,应该创建单独的表空间给它使用(最好把表和索引分开放在表空间)
sql> create tablespace p95169tbs
2 datafile '/home/oracle/app/oradata/lxdbtest/p95169tbs01.dbf' size 10g,
3 '/home/oracle/app/oradata/lxdbtest/p95169tbs02.dbf' size 10g;
tablespace created.
6. 构建数据字典视图
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql
7. 修改system,sys的密码
alter user sys identified by ***;
alter user system identified by ***;
8. 创建spfile
sql> create spfile from pfile;
file created.
重启数据库后,将以spfile取代pfile.
最后,再顺便说下如何删除数据库。在删除数据库之前,数据库必须是在mount和restricted session状态,具体如下:
sql> startup mount
sql> alter system enable restricted session;
system altered.
sql> drop database;
database dropped.
数据库删除成功后,所有的在线日志文件、数据文件都会一并被删除,但归档日志和备份文件不会被删除。