往期回顾链接
Oracle数据库设计规范篇{二}——物理设计规范【上】(基本规范、表设计规范)
Oracle数据库设计规范篇{三}——物理设计规范【中】(分区设计规范)
Oracle数据库设计规范篇{四}——物理设计规范【下】(列的设计,命名的规范)
Oracle数据库设计规范篇{五}——索引规范【上】(分区、函数、位图及外键的索引)
Oracle数据库设计规范篇{六}——索引规范【下】(联合、无、失效索引..)
在Oracle数据库设计与实施的旅程中,我们已经探讨了多个关键领域。本文作为设计篇的收官之作,将聚焦于环境参数配置与命名规范这两个往往被忽视却至关重要的方面。良好的环境参数配置能确保数据库性能最优,而统一的命名规范则为日后的维护和协作奠定基础。让我们深入了解这些最佳实践,完美收官我们的设计篇章。
4.1.1 SGA及PGA参数
OLTP应用是主机内存的80%分配数据库,其中SGA80%,PGA20%
OLAP应用是主机内存的80%分配数据库,其中SGA50%,PGA50%
如OLTP应用:主机内存30G,SGA即使30*0.8*0.8=20G左右
----不过这里还是要注意:并没有什么黄金参数,这些还只能是参考。
sqlplus "/ as sysdba" show parameter process show parameter session select count(*) from v$process; select count(*) from v$session; -----默认连接数是150,这对大多数应用都无法满足,大型应用一般不少于1000个。
sqlplus "/ as sysdba" show parameter open_cursor ----默认open_cursors是300,大型应用需设置1000以上,原则上不超过PROCESS设置。
一般来说,ORALCE默认的日志参数是3组,大小为500M,在实际较大的生产应用中往往不够,需要至少考虑在5组以上,大小在1G以上。
一般来说,生产系统大多需要开启归档,只有在特殊的场合下数据安全性无关紧要(如测试环境),才可以关闭归档。
-- 检查数据库是否处于归档模式 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;
自动管理
避免自动扩展
尽可能规划大
-- 检查当前回滚表空间配置 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;
避免自动扩展,由监控跟进
尽可能大
尽可能使用临时表空间组
-- 检查临时表空间配置 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;
控制个数,不超过6个为宜
尽量避免自动扩展,超阀值由监控来检查
根据自己的业务,固定表空间名
表空间需良好分类(参数配置表,业务数据表,历史记录表)
表空间需合理命名
尽量采用BALANCE模式,保证两节点压力大致相当。
可适当考虑不同类型的业务部署在不同的节点上,避免RAC的CACHE争用。
尽量考虑不同的节点使用不同的临时表空间。
需要特别说明的是,并非一定要这么命名,只是强调但是在同一开发团队甚至同一公司里,必须统一规范,在内部达成一致的认可。所以下述命名规范,仅供参考。
select * from user_tables where substr(table_name,1,2)<>'T_' ;
select view_name from user_views where substr(view_name,1,2)<>'V_'
select synonym_name, table_owner, table_name from user_synonyms where substr(synonym_name, 1, 2) <> 'S_';
select t.cluster_name,t.cluster_type from user_clusters t where substr(cluster_name, 1, 2) <> 'C_';
select sequence_name,cache_size from user_sequences where sequence_name not like '%SEQ%';
select object_name,procedure_name from user_procedures where object_type = 'PROCEDURE' and substr(object_name, 1, 2) <> 'P_';
select object_name,procedure_name from user_procedures where object_type = 'FUNCTION' and substr(object_name, 1, 2) <> 'F_';
select object_name,procedure_name from user_procedures where object_type = 'PACKAGE' and substr(object_name, 1, 4) <> 'PKG_';
select object_name,procedure_name from user_procedures where object_type = 'TYPE' and substr(object_name, 1, 4) <> 'TYP_';
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$%';
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$%';
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$%';
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$%';
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$%';
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$%';

通过本文的环境参数配置和命名规范指导,我们完成了Oracle数据库设计规范系列的最后一篇。良好的环境参数配置可以优化系统性能,而统一的命名规范则提高了系统的可读性和可维护性。
记住,这些规范并非一成不变的教条,而是经验总结的最佳实践。在实际应用中,应根据具体业务特点和团队习惯进行合理调整,但一旦确定,就应在团队中严格执行,确保一致性。
至此,Oracle数据库设计规范篇已全部完结。希望这一系列文章能为您的Oracle数据库设计工作提供有价值的参考。
公众号:收获不止数据库
微信:ljbyxl1213
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3083807/ ,如需转载,请注明出处,否则将追究法律责任。