上一篇【第17篇】Oracle逻辑与物理存储结构——表空间、段、区、数据块全解析下一篇【第19篇】使用DBCA创建Oracle数据库——图形化向导完全指南摘要本文讲解创建Oracle数据库前的规划工作包括SGA和内存规划、数据文件布局规划、控制文件多元化规划、重做日志文件设计、字符集选择等关键决策。详细的前期规划能避免后期大量的重构工作是成功部署Oracle数据库的基础。一、规划的重要性创建Oracle数据库不是简单地执行一条CREATE DATABASE语句而是需要在此之前做大量的规划工作。一旦数据库投入使用很多参数如字符集、数据块大小几乎无法更改而另一些参数的更改代价也极高如重做日志文件大小、控制文件位置。二、字符集规划字符集是创建数据库时最关键的决策之一创建后更改代价极高。-- 常用字符集-- AL32UTF8Unicode UTF-8支持所有语言推荐新建数据库使用-- ZHS16GBK中文简体GBK每个汉字2字节-- ZHS32GB18030中文国家标准每个汉字2-4字节-- WE8ISO8859P1西欧字符集只支持西文-- 检查字符集兼容性SELECT*FROMv$nls_valid_valuesWHEREparameterCHARACTERSETANDvalueLIKE%UTF%ORDERBYvalue;-- 规划建议-- 1. 如果有国际化需求必须用AL32UTF8-- 2. 纯中文系统可以用ZHS16GBK但推荐AL32UTF8-- 3. 国家字符集NCHAR类型建议用AL16UTF16-- 查看现有数据库的字符集参考SELECTvalueFROMnls_database_parametersWHEREparameterIN(NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET);三、内存与参数文件规划-- 创建PFILEinit.ora模板-- 文件通常位于$ORACLE_HOME/dbs/initORCL.oraUnix-- %ORACLE_HOME%\database\initORCL.oraWindows-- 最小化参数文件内容 -- db_name ORCL -- 数据库名最多8字符-- instance_name orcl -- 实例名-- db_block_size 8192 -- 块大小创建后不可修改-- sga_target 1G -- SGA总量-- pga_aggregate_target 512M -- PGA总量-- undo_tablespace UNDOTBS1 -- UNDO表空间名-- control_files ( -- 控制文件多个位置-- /u01/oradata/orcl/control01.ctl,-- /u02/oradata/orcl/control02.ctl,-- /u03/oradata/orcl/control03.ctl-- )-- db_recovery_file_dest /u04/fast_recovery_area -- 快速恢复区-- db_recovery_file_dest_size 5G-- diagnostic_dest /u01/oracle-- audit_file_dest /u01/oracle/admin/orcl/adump-- audit_trail DB-- nls_language SIMPLIFIED CHINESE-- nls_territory CHINA-- open_cursors 300-- processes 300-- remote_login_passwordfile EXCLUSIVE四、数据文件布局规划-- OFAOptimal Flexible Architecture推荐的文件布局-- /u01/oracle/admin/dbname/adump -- 审计文件-- /u01/oracle/admin/dbname/dpdump -- 数据泵目录-- /u01/oradata/dbname/ -- 数据文件目录-- /u02/oradata/dbname/ -- 第二磁盘数据文件-- /u03/arch/dbname/ -- 归档日志-- /u04/fast_recovery_area/ -- 快速恢复区RMAN备份-- 规划各表空间的数据文件位置-- SYSTEM表空间/u01/oradata/orcl/system01.dbf约700MB-- SYSAUX表空间/u01/oradata/orcl/sysaux01.dbf约500MB-- UNDOTBS1/u01/oradata/orcl/undotbs01.dbf根据并发量通常1-4GB-- TEMP/u01/oradata/orcl/temp01.dbf根据排序需求通常500MB-2GB-- USERS/u01/oradata/orcl/users01.dbf根据业务数据量规划-- 自动调整UNDO保留时间的建议-- 根据最长查询时间 一定余量来规划UNDO表空间大小-- 查询当前最长运行的查询的时间SELECTMAX(elapsed_seconds)ASmax_query_secsFROMv$sql;五、重做日志文件规划-- 重做日志规划原则-- 1. 每个数据库至少3个日志组允许在最慢的情况下有足够的切换时间-- 2. 每个日志组至少2个成员多元镜像分布在不同磁盘-- 3. 日志文件大小通常50MB-500MBOLTP系统推荐200MB以上-- 规划示例每组2个成员3个组-- GROUP 1: /u01/redo/redo01a.log, /u02/redo/redo01b.log200MB-- GROUP 2: /u01/redo/redo02a.log, /u02/redo/redo02b.log200MB-- GROUP 3: /u01/redo/redo03a.log, /u02/redo/redo03b.log200MB-- 判断日志文件是否太小的方法-- 查看日志切换频率目标每15-30分钟切换一次SELECTsequence#, blocks * 512 / 1024 / 1024 AS mb,TO_CHAR(first_time,YYYY-MM-DD HH24:MI)ASstart_time,TO_CHAR(next_time,YYYY-MM-DD HH24:MI)ASend_timeFROMv$archived_logWHEREfirst_timeSYSDATE-1ORDERBYsequence# DESC;-- 如果切换过于频繁10分钟需要增大日志文件六、创建前的环境检查# 检查操作系统要求以Linux为例# 1. 检查内核参数sysctl-a|grep-Esem|shmmax|shmmni|shmall|file-max|ip_local_port_range# 2. 检查磁盘空间Oracle 11g软件需要约4.5GBdf-h# 3. 检查内存Oracle 11g最小要求1GB RAMfree-h# 4. 检查oracle用户和组idoraclegroupsoracle# 5. 检查ORACLE_HOME和ORACLE_BASE环境变量echo$ORACLE_HOMEecho$ORACLE_BASEecho$ORACLE_SID-- 数据库创建后的验证脚本-- 确认所有默认表空间和组件已就绪-- 检查数据库状态SELECTname,open_mode,log_mode,db_unique_nameFROMv$database;-- 检查所有组件安装情况SELECTcomp_name,version,statusFROMdba_registryORDERBYcomp_name;-- 确认核心表空间存在SELECTtablespace_name,statusFROMdba_tablespaces;七、总结数据库创建前的规划清单规划项目关键决策重要程度字符集AL32UTF8推荐或ZHS16GBK★★★★★数据块大小通常8KB创建后不可改★★★★★内存参数SGA/PGA大小AMM vs 手动★★★★控制文件至少3个不同磁盘★★★★★重做日志至少3组每组2成员200MB以上★★★★文件布局遵循OFA规范★★★★归档模式生产系统必须开启★★★★★下一篇将讲解使用DBCA图形工具创建数据库的详细步骤。上一篇【第17篇】Oracle逻辑与物理存储结构——表空间、段、区、数据块全解析下一篇【第19篇】使用DBCA创建Oracle数据库——图形化向导完全指南参考资料《Oracle 11g数据库管理员指南》— 刘宪军著Oracle官方文档Database Administrator’s Guide - Creating a Database