梁敬彬梁敬弘兄弟出品
完整系列
Oracle数据库设计规范篇{一}——表规范
Oracle数据库设计规范篇{二}——物理设计规范【上】(基本规范、表设计规范)
Oracle数据库设计规范篇{三}——物理设计规范【中】(分区设计规范)
Oracle数据库设计规范篇{四}——物理设计规范【下】(列的设计、命名的规范)
Oracle数据库设计规范篇{五} ——索引规范【上】(分区索引、函数索引、位图索引、外键索引)
Oracle数据库设计规范篇{六}——索引规范【下】(联合索引、索引数量、没有索引、失效索引)
Oracle数据库设计规范篇{七}【设计篇完结】——环境参数规范(数据库参数、表空间规划、RAC、命名规范)
4. 环境参数规范
4.1 数据库参数
4.1.1 SGA及PGA参数
OLTP应用是主机内存的80%分配数据库,其中SGA80%,PGA20%
OLAP应用是主机内存的80%分配数据库,其中SGA50%,PGA50%
如OLTP应用:主机内存30G,SGA即使300.80.8=20G左右
----不过这里还是要注意:并没有什么黄金参数,这些还只能是参考。
4.1.2 PROCESS/SESSION
sqlplus "/ as sysdba"
show parameter process
show parameter session
select count(*) from v$process;
select count(*) from v$session;
-----默认连接数是150,这对大多数应用都无法满足,大型应用一般不少于1000个。
4.1.3 OPEN_CURSOR游标参数
sqlplus "/ as sysdba"
show parameter open_cursor
----默认open_cursors是300,大型应用需设置1000以上,原则上不超过PROCESS设置。
4.1.4 日志参数
一般来说,ORALCE默认的日志参数是3组,大小为500M,在实际较大的生产应用中往往不够,需要至少考虑在5组以上,大小在1G以上。
4.1.5 是否归档
一般来说,生产系统大多需要开启归档,只有在特殊的场合下数据安全性无关紧要(如测试环境),才可以关闭归档。
-- 检查数据库是否处于归档模式
ARCHIVE LOG LIST;
-- 根据规范,生产系统应开启归档模式
-- 如果输出显示"Database log mode: No Archive Mode",则需启用归档模式
-- 启用归档模式的步骤(需重启数据库):
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 配置适合生产环境的归档设置
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/oracle/archive REUSE';
ALTER SYSTEM SET log_archive_format='arch_%r_%s_%t.arc' SCOPE=SPFILE;
4.2 表空间规划
4.2.1 回滚表空间
- 自动管理
- 避免自动扩展
- 尽可能规划大
-- 检查当前回滚表空间配置
SELECT tablespace_name, status, contents, retention
FROM dba_tablespaces
WHERE contents = 'UNDO';
-- 检查回滚表空间文件是否设置了自动扩展(规范要求避免自动扩展)
SELECT file_name, tablespace_name, bytes/1024/1024 "Size (MB)",
autoextensible, maxbytes/1024/1024 "Max Size (MB)"
FROM dba_data_files
WHERE tablespace_name IN (SELECT tablespace_name FROM dba_tablespaces WHERE contents = 'UNDO');
-- 如果回滚表空间文件设置了自动扩展,违反规范,需修改
ALTER DATABASE DATAFILE '/oradata/undotbs01.dbf' AUTOEXTEND OFF;
-- 如回滚表空间偏小,根据规范创建足够大的新回滚表空间
CREATE UNDO TABLESPACE undotbs2
DATAFILE '/oradata/undotbs02.dbf' SIZE 8G REUSE
AUTOEXTEND OFF;
-- 切换到新的undo表空间
ALTER SYSTEM SET undo_tablespace = undotbs2;
4.2.2 临时表空间
- 避免自动扩展,由监控跟进
- 尽可能大
- 尽可能使用临时表空间组
-- 检查临时表空间配置
SELECT tablespace_name, status, contents, extent_management
FROM dba_tablespaces
WHERE contents = 'TEMPORARY';
-- 检查临时表空间文件是否设置了自动扩展(规范要求避免自动扩展)
SELECT file_name, tablespace_name, bytes/1024/1024 "Size (MB)",
autoextensible, maxbytes/1024/1024 "Max Size (MB)"
FROM dba_temp_files;
-- 如果临时表空间文件设置了自动扩展,违反规范,需修改
ALTER DATABASE TEMPFILE '/oradata/temp01.dbf' AUTOEXTEND OFF;
-- 检查是否使用了临时表空间组(规范建议使用)
SELECT * FROM dba_tablespace_groups;
-- 如未使用临时表空间组,创建并配置
-- 先创建足够大的临时表空间
CREATE TEMPORARY TABLESPACE temp_large
TEMPFILE '/oradata/temp_large01.dbf' SIZE 10G
AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
-- 创建临时表空间组并添加表空间
ALTER TABLESPACE temp TABLESPACE GROUP temp_group;
ALTER TABLESPACE temp_large TABLESPACE GROUP temp_group;
-- 设置默认临时表空间组
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_group;
4.2.3 业务表空间
控制个数,不超过6个为宜
尽量避免自动扩展,超阀值由监控来检查
根据自己的业务,固定表空间名
表空间需良好分类(参数配置表,业务数据表,历史记录表)
表空间需合理命名
4.3 RAC系统
尽量采用BALANCE模式,保证两节点压力大致相当。
可适当考虑不同类型的业务部署在不同的节点上,避免RAC的CACHE争用。
尽量考虑不同的节点使用不同的临时表空间。
4.4 命名规范
需要特别说明的是,并非一定要这么命名,只是强调但是在同一开发团队甚至同一公司里,必须统一规范,在内部达成一致的认可。所以下述命名规范,仅供参考。
4.4.1表以t_为前缀
select * from user_tables where substr(table_name,1,2)<>'T_' ;
4.4.2 视图以v_为前缀
select view_name from user_views where substr(view_name,1,2)<>'V_'
4.4.3 同义词以s_为前缀
select synonym_name, table_owner, table_name
from user_synonyms
where substr(synonym_name, 1, 2) <> 'S_';
4.4.4 簇表以c_为前缀
select t.cluster_name,t.cluster_type
from user_clusters t
where substr(cluster_name, 1, 2) <> 'C_';
4.4.5 序列以seq_为前缀或后缀
select sequence_name,cache_size
from user_sequences
where sequence_name not like '%SEQ%';
4.4.6 存储过程以p_为前缀
select object_name,procedure_name
from user_procedures
where object_type = 'PROCEDURE'
and substr(object_name, 1, 2) <> 'P_';
4.4.7 函数以f_为前缀
select object_name,procedure_name
from user_procedures
where object_type = 'FUNCTION'
and substr(object_name, 1, 2) <> 'F_';
4.4.8 包以pkg_为前缀
select object_name,procedure_name
from user_procedures
where object_type = 'PACKAGE'
and substr(object_name, 1, 4) <> 'PKG_';
4.4.9 类以typ_为前缀
select object_name,procedure_name
from user_procedures
where object_type = 'TYPE'
and substr(object_name, 1, 4) <> 'TYP_';
4.4.10主键以pk_为前缀
select constraint_name, table_name
from user_constraints
where constraint_type = 'P'
and substr(constraint_name, 1, 3) <> 'PK_'
and constraint_name not like 'BIN$%';
4.4.11外键以fk_为前缀
select constraint_name,table_name
from user_constraints
where constraint_type = 'R'
and substr(constraint_name, 1, 3) <> 'FK_'
and constraint_name not like 'BIN$%';
4.4.12 唯一索引以ux_为前缀
select constraint_name,table_name
from user_constraints
where constraint_type = 'U'
and substr(constraint_name, 1, 3) <> 'UX_'
and table_name not like 'BIN$%';
4.4.13普通索引以idx_为前缀
select index_name,table_name
from user_indexes
where index_type='NORMAL'
and uniqueness='NONUNIQUE'
and substr(index_name, 1, 4) <> 'IDX_'
and table_name not like 'BIN$%';
4.4.14位图索引以bx_为前缀
select index_name,table_name
from user_indexes
where index_type LIKE'%BIT%'
and substr(index_name, 1, 3) <>'BX_'
and table_name not like'BIN$%';
4.4.15函数索引以fx_为前缀
select index_name,table_name
from user_indexes
where index_type='FUNCTION-BASED NORMAL'
and substr(index_name, 1, 3) <>'FX_'
and table_name not like'BIN$%';
系列回顾
“大白话人工智能” 系列
“数据库拍案惊奇” 系列
“世事洞明皆学问” 系列
三分钟讲述个人感悟——感恩,回馈