我是一名应用程序团队的开发人员,该团队支持具有一个生产数据库和 4 个测试数据库(2 个 Dev,一个 SIT 和 UAT 环境)的系统。
prod 数据库存在于它自己的 Unix 服务器上,而 4 个测试数据库都位于不同的 Unix 服务器上。出于各种原因,多年来,这 6 个数据库在初始化参数方面变得非常不同步。对 V$Parameter 表的快速比较揭示了一些导致我们的应用程序团队出现问题并需要更正的关键设置差异。
我现在正在与我们的 DBA 团队合作,尝试纠正它们,但这是一家大型企业,过程很痛苦。我很想找到一种方法,使这些参数更好地与共享同一服务器的那些数据库保持一致。
有没有办法让多个数据库共享一个参数文件?我查看了一些文档并看到了一些关于为 RAC 设置执行此操作的参考资料,但这些数据库不是集群的,而只是彼此的副本。SID
我知道像和这样的某些参数db_name
需要是唯一的,但我想知道像global_names
和这样的常见设置resource_limit
是否可以以某种方式集中?
注意我目前使用的是 11G,但我们计划在一个月内升级到 12G。
不,您必须为每个数据库使用单独的参数文件/spfile。正如您所指出的,您需要一些不同的设置(文件位置、数据库名称等)。在许多环境中,您可能希望以不同方式调整内存和其他性能设置,因为开发环境通常没有生产环境那么多的 RAM。
但是,即使您可以共享参数文件,您也不会想要这样做。更改参数应该像更改代码一样涉及一些开发和测试。因此,您可能希望在开发中进行更改、验证它并像代码更改一样提升它。如果您共享一个参数文件,则必须同时在所有环境中进行更改,这在某种程度上违背了拥有多个环境的目的。如果您在 dev 中进行了更改但没有成功,则需要将其撤消,就像撤消代码更改一样。
您当然可以备份生产参数文件,并将其复制下来,并根据需要对较低的环境进行任何更改。您可以使用您今天使用的任何机制来管理代码部署(我假设是某种源代码控制系统和构建过程)来对这些参数文件进行版本控制并部署它们,以便您了解差异是什么以及为什么(即开发人员使用
memory_target
一般来说,dev 已global_names
设置为较低,true
因为您正在为项目 X 测试它,但尚未提升到生产环境)。通常我们为每个数据库使用不同的 spfile。即使 spfile 是二进制文件,您也可以使用 strings 命令提取 spfile 中的设置。您还可以将一个数据库的 spfile 与另一个数据库进行比较以查找差异。在我看来,根本问题是变革管理问题。您应该有一个有效的配置,并使每个数据库都使用相同的配置。