返璞归真:如何判断一个初始化参数是否来自默认设置

杨廷琨(yangtingkun)

云和恩墨 CTO

高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主

Oracle初始化参数之多,变化之繁复可能,我们又如何去分辨哪些参数来自缺省设置,哪些又经过修改调整呢?

Oracle 在视图 V$SYSTEM_PARAMETER 中提供了一个列 ISDEFAULT,表示当前设置的值是否是数据库的默认值:

SQL> select name, value, isdefault 2 from v$system_parameter 3 where name = 'open_cursors'; NAME VALUE ISDEFAULT ------------------------------ ------------------------------------- --------- open_cursors 400 FALSE SQL> select isdefault, count(*) 2 from v$system_parameter 3 group by isdefault; ISDEFAULT COUNT(*) --------- ---------- TRUE 267 FALSE 22

根据这个结果可以看到,数据库中绝大部分的初始化参数设置都是默认值。

我们再来看一下修改一个默认参数,等值情况:

SQL> select name, value, isdefault 2 from v$system_parameter 3 where name = 'undo_retention'; NAME VALUE ISDEFAULT ------------------------------ -------------------------------------------------- --------- undo_retention 900 TRUE SQL> select sid, name, value 2 from v$spparameter 3 where name = 'undo_retention'; SID NAME VALUE ---------- ------------------------------ --------------------------- * undo_retention SQL> alter system set undo_retention = 900; 系统已更改。 SQL> select name, value, isdefault 2 from v$system_parameter 3 where name = 'undo_retention'; NAME VALUE ISDEFAULT ------------------------------ -------------------------------------------------- --------- undo_retention 900 TRUE SQL> select sid, name, value 2 from v$spparameter 3 where name = 'undo_retention'; SID NAME VALUE ---------- ------------------------------ ---------------------------- * undo_retention 900

对于手工设置的初始化参数与系统默认值相同的情况,通过 v$system_parameter 视图是无法区分的。

同样通过查询 V$SPPARAMETER 视图检查 SPFILE 的设置也不准确,因为初始化参赛可能是通过 PFILE 设置的,或者是实例启动后由 ALTER SYSTEM 命令进行过修改。

对于这种情况,通过 CREATE PFILE FROM MEMORY 或 CREATE 的方式是可以看到的参数变化的,不过既然这种方法能够查询得到,那么数据库中一定是在默写地方进行了记录。

实际上查询 V$SYSTEM_PARAMETER4 视图就可以获取到所有用户设置的初始化参数。

SQL> select sid, name, display_value value 2 from v$system_parameter4 3 where name not like '/_%' escape '/'; SID NAME VALUE ---------- ------------------------------ ----------------------------------------------- test1 processes 150 test1 spfile +DATA/test/spfiletest.ora test1 resource_manager_plan SCHEDULER[0x2C0E]:DEFAULT_MAINTENANCE_PLAN test1 sga_target 740M test1 control_files +DATA/test/controlfile/current.529.684067899 test1 db_block_size 8192 test1 compatible 11.1.0.0.0 test1 log_archive_config test1 log_archive_dest_1 LOCATION=/data/oracle/oradata/test/archivelog test1 log_buffer 4197376 test1 cluster_database TRUE test1 cluster_database_instances 3 test1 db_create_file_dest +DATA test1 thread 1 test1 undo_tablespace UNDOTBS1 test1 undo_retention 900 test1 instance_number 1 test1 remote_login_passwordfile SHARED test1 db_domain test1 plsql_warnings DISABLE:ALL test1 result_cache_max_size 3808K test1 core_dump_dest /data/oracle/diag/rdbms/test/test1/cdump test1 audit_file_dest /data/oracle/admin/test/adump test1 audit_trail DB test1 db_name test test1 open_cursors 400 test1 optimizer_mode ALL_ROWS test1 query_rewrite_enabled TRUE test1 pga_aggregate_target 245M test1 optimizer_dynamic_sampling 2 test1 skip_unusable_indexes TRUE test1 diagnostic_dest /data/oracle 已选择32行。

而事实上,当数据库执行 CREATE PFILE FROM MEMORY 命令时,Oracle 创建 PFILE 的数据源就是 V$SYSTEM_PARAMETER4 这个视图

前面介绍了很多种查询初始化参数的方法,其实还有一个方法也是很有用的,就是通过 alert 文件检查数据库加载的所有非默认值的初始化参数。

SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 776896512 bytes Fixed Size 2098776 bytes Variable Size 246077864 bytes Database Buffers 524288000 bytes Redo Buffers 4431872 bytes 数据库装载完毕。 数据库已经打开。 SQL> host bash-3.00$ tail -200 /data/oracle/diag/rdbms/test/test1/trace/alert_test1.log Sat Jun 13 15:20:03 2009 Stopping background process SMCO Stopping background process FBDA Shutting down instance: further logons disabled Shutting down archive processes Archiving is disabled . . . Sat Jun 13 15:20:19 2009 Instance shutdown complete Sat Jun 13 15:20:22 2009 Some alert messages have been suppressed because they were produced too early Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Autotune of undo retention is turned on. LICENSE_MAX_USERS = 0 SYS auditing is disabled Starting up ORACLE RDBMS Version: 11.1.0.6.0. Using parameter settings in server-side pfile /data/oracle/product/11.1/database/dbs/inittest1.ora System parameters with non-default values: processes = 150 spfile = "+DATA/test/spfiletest.ora" sga_target = 740M control_files = "+DATA/test/controlfile/current.529.684067899" db_block_size = 8192 compatible = "11.1.0.0.0" log_archive_config = "" log_archive_dest_1 = "LOCATION=/data/oracle/oradata/test/archivelog" cluster_database = TRUE cluster_database_instances= 3 db_create_file_dest = "+DATA" thread = 1 undo_tablespace = "UNDOTBS1" undo_retention = 900 instance_number = 1 remote_login_passwordfile= "SHARED" db_domain = "" audit_file_dest = "/data/oracle/admin/test/adump" audit_trail = "DB" db_name = "test" open_cursors = 500 pga_aggregate_target = 245M diagnostic_dest = "/data/oracle" Cluster communication is configured to use the following interface(s) for this instance 172.0.2.62 cluster interconnect IPC version:Oracle UDP/IP (generic) IPC Vendor 1 proto 2 Sat Jun 13 15:20:23 2009 PMON started with pid=2, OS id=19138 Sat Jun 13 15:20:23 2009 VKTM started with pid=4, OS id=19140 at elevated priority VKTM running at (20)ms precision Sat Jun 13 15:20:24 2009 DIAG started with pid=6, OS id=19144 Sat Jun 13 15:20:24 2009 DBRM started with pid=8, OS id=19146 . . . Completed: ALTER DATABASE OPEN Sat Jun 13 15:20:41 2009 Starting background process CJQ0 Sat Jun 13 15:20:41 2009 CJQ0 started with pid=64, OS id=19434 Setting Resource Manager plan SCHEDULER[0x2C0E]:DEFAULT_MAINTENANCE_PLAN via scheduler window Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter

检查 alert 文件的方法不但可以获取当前实例所有非默认初始化参数的信息,还是初始化参数文件丢失后用来恢复初始化参数文件的一种方法。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

mysql创建定时执行存储过程任务

sql语法很多,是一门完整语言。这里仅仅实现一个功能,不做深入研究。 目标:定时更新表或者清空表。 案例:曾经做过定时清空位置信息表的任务。(然而,当时并未考虑...

3477
来自专栏乐沙弥的世界

MySQL抑制binlog日志中的BINLOG部分

    MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库。MySQL binlog日志记录有3...

491
来自专栏杨建荣的学习笔记

Oracle 12cR2中的ADG会话保留特性

Oracle 12cR2中有一个不错的特性,那就是Active Data Guard会话保留,原本的叫法是Preserving Active Data Guar...

2625
来自专栏分布式系统和大数据处理

Hive中分区和分桶的概念和操作

在使用传统的RDBMS数据库(关系数据库),例如MySql时,对于一些大表,我们通常会进行分表操作,以提升查询效率。在Hive中也提供了类似的概念和操作,本文将...

931
来自专栏杨建荣的学习笔记

关于sequence问题的紧急处理(r2第26天)

今天早上收到邮件,说有一个很紧急的问题,是关于sequence的。 错误日志里面还有ORA的错误 ----- ... 7 more Cause...

2848
来自专栏杨建荣的学习笔记

数据迁移部分问题总结(r2第3天)

按照计划在周二开始了数据迁移,本来之前也做了不少的准备工作。但是还是在迁移的过程中出现了一些问题。简单做一个总结。 1.constraint导致的数据rej...

2737
来自专栏杨建荣的学习笔记

mysqldump的一点使用总结(r12笔记第81天)

MySQL里的mysqldump无疑是大家使用最为广泛的备份恢复工具了。这样一个工具使用起来功能非常丰富,很多功能几个参数组合起来就能够轻松实现了,我就简单...

2825
来自专栏程序猿

SQL 注入语句特征

语句特征 1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass passwor...

36211
来自专栏程序猿DD

一个不可思议的MySQL慢查分析与解决

前言 开发需要定期的删除表里一定时间以前的数据,SQL如下 mysql > delete from testtable WHERE biz_date <= '2...

3275
来自专栏杨建荣的学习笔记

关于db link权限分配的苦旅(一) (r7笔记第42天)

昨天接到一个开发的需求,内容看起来非常简单。 申请数据库192.168.1.118:1522:TEST下用户APP_TE_FLOW_128赋予对表testore...

3246

扫描关注云+社区