上一篇【第17篇】Oracle逻辑与物理存储结构——表空间、段、区、数据块全解析
下一篇【第19篇】使用DBCA创建Oracle数据库——图形化向导完全指南
摘要
本文讲解创建Oracle数据库前的规划工作,包括SGA和内存规划、数据文件布局规划、控制文件多元化规划、重做日志文件设计、字符集选择等关键决策。详细的前期规划能避免后期大量的重构工作,是成功部署Oracle数据库的基础。
一、规划的重要性
创建Oracle数据库不是简单地执行一条CREATE DATABASE语句,而是需要在此之前做大量的规划工作。一旦数据库投入使用,很多参数(如字符集、数据块大小)几乎无法更改,而另一些参数的更改代价也极高(如重做日志文件大小、控制文件位置)。
二、字符集规划
字符集是创建数据库时最关键的决策之一,创建后更改代价极高。
-- 常用字符集:-- AL32UTF8:Unicode UTF-8,支持所有语言,推荐新建数据库使用-- ZHS16GBK:中文简体GBK,每个汉字2字节-- ZHS32GB18030:中文国家标准,每个汉字2-4字节-- WE8ISO8859P1:西欧字符集,只支持西文-- 检查字符集兼容性SELECT*FROMv$nls_valid_valuesWHEREparameter='CHARACTERSET'ANDvalueLIKE'%UTF%'ORDERBYvalue;-- 规划建议:-- 1. 如果有国际化需求,必须用AL32UTF8-- 2. 纯中文系统可以用ZHS16GBK,但推荐AL32UTF8-- 3. 国家字符集(NCHAR类型)建议用AL16UTF16-- 查看现有数据库的字符集(参考)SELECTvalueFROMnls_database_parametersWHEREparameterIN('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');三、内存与参数文件规划
-- 创建PFILE(init.ora)模板-- 文件通常位于:$ORACLE_HOME/dbs/initORCL.ora(Unix)-- %ORACLE_HOME%\database\initORCL.ora(Windows)-- ===== 最小化参数文件内容 =====-- 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四、数据文件布局规划
-- OFA(Optimal 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-500MB,OLTP系统推荐200MB以上-- 规划示例(每组2个成员,3个组):-- GROUP 1: /u01/redo/redo01a.log, /u02/redo/redo01b.log(200MB)-- GROUP 2: /u01/redo/redo02a.log, /u02/redo/redo02b.log(200MB)-- GROUP 3: /u01/redo/redo03a.log, /u02/redo/redo03b.log(200MB)-- 判断日志文件是否太小的方法:-- 查看日志切换频率(目标:每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_time>SYSDATE-1ORDERBYsequence# DESC;-- 如果切换过于频繁(<10分钟),需要增大日志文件六、创建前的环境检查
# 检查操作系统要求(以Linux为例)# 1. 检查内核参数sysctl-a|grep-E'sem|shmmax|shmmni|shmall|file-max|ip_local_port_range'# 2. 检查磁盘空间(Oracle 11g软件需要约4.5GB)df-h# 3. 检查内存(Oracle 11g最小要求:1GB RAM)free-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