问题:如何创建具有最优性能的数据库
1、强制创建的每一个表空间都是本地管理的
2、为每个用户自动分配一个默认的永久表空间
3、为每个用户自动分配一个默认的临时表空间
解决方案:使用下面的创建数据库脚本
create database o11r2
maxlogfiles 16
maxlogmembers 4
maxdatafiles 1024
maxinstances 1
maxloghistory 680
character set al32utf8
datafile
'd:/oradata/o11r2/system01.dbf'
size 500m reuse
extent management local
undo tablespace undotbs1 datafile
'd:/oradata/o11r2/undotbs01.dbf'
size 800m
sysaux datafile
'd:/oradata/o11r2/sysaux01.dbf'
size 500m
default temporary tablespace temp tempfile
'd:/oradata/o11r2/temp01.dbf'
size 500m
default tablespace users datafile
'd:/oradata/o11r2/users01.dbf'
size 50m
logfile group 1
('d:/oradata/o11r2/redo01a.log',
'd:/oradata/o11r2/redo01b.log') size 200m,
group 2
('d:/oradata/o11r2/redo02a.log',
'd:/oradata/o11r2/redo02b.log') size 200m,
group 3
('d:/oradata/o11r2/redo03a.log',
'd:/oradata/o11r2/redo03b.log') size 200m
user sys identified by oracle
user system identified by oracle;
上述脚本实现了以下功能:
1、通过extent management local,将system表空间置为本地管理,这确保所有表空间都是本地管理的
2、为创建时没有显示定义默认永久表空间的用户分配users作为默认永久表空间(防止使用system)
3、为创建时没有显示定义默认临时表空间的用户分配temp作为默认临时表空间(防止使用system)
工作原理:创建了最优的数据库,并且考虑了以下
1、创建了自动管理的undo表空间(通过undo_management和undo_tablespace管理)
2、将dba相关用户密码设置为非默认值,安全性考虑
3、创建三组日志成员,大小适合事物处理
接手一个新数据库,可以通过下面的sql语句检查是否符合广泛的标准:
永久表空间
select property_name,property_value from database_properties where property_name='DEFAULT_PERMANENT_TABLESPACE';
alter database default tablespace users;
临时表空间
select property_name,property_value from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
alter database default temporary tablespace temp;
undo表空间
select name,value from v$parameter where name in('undo_management','undo_tablespace');
修改undo表空间需要先创建一个undo表空间,然后修改undo_tablespace参数
手工建库执行以下脚本:
@?/rdbms/admin/catalog.sql(手工建库创建相关数据字典)
@?/rdbms/admin/catproc.sql(手工建库创建函数过程包)