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

194410451_21_20200709102302349杨廷琨(yangtingkun)

云和恩墨 CTO

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

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

Oracle 在视图 V$SYSTEM_PARAMETER 中提供了一个列 ISDEFAULT,表示当前设置的值是否是数据库的默认值:SQL> select name, value, isdefault 2  from v$system_parameter3  where name = 'open_cursors';

NAME                           VALUE                                              ISDEFAULT------------------------------ ------------------------------------- ---------open_cursors                   400                                                FALSE

SQL> select isdefault, count(*)2  from v$system_parameter3  group by isdefault;

ISDEFAULT   COUNT(*)--------- ----------TRUE             267FALSE             22

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

我们再来看一下修改一个默认参数,等值情况:SQL> select name, value, isdefault2  from v$system_parameter3  where name = 'undo_retention';

NAME                           VALUE                                              ISDEFAULT------------------------------ -------------------------------------------------- ---------undo_retention                 900                                                TRUE

SQL> select sid, name, value2  from v$spparameter3  where name = 'undo_retention';

SID        NAME                           VALUE---------- ------------------------------ ---------------------------*          undo_retention

SQL>  alter system set undo_retention = 900;

系统已更改。

SQL> select name, value, isdefault2  from v$system_parameter3  where name = 'undo_retention';

NAME                           VALUE                                              ISDEFAULT------------------------------ -------------------------------------------------- ---------undo_retention                 900                                                TRUE

SQL> select sid, name, value2  from v$spparameter3  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 value2  from v$system_parameter43  where name not like '/_%' escape '/';

SID        NAME                           VALUE---------- ------------------------------ -----------------------------------------------test1      processes                      150test1      spfile                         +DATA/test/spfiletest.oratest1      resource_manager_plan          SCHEDULER[0x2C0E]:DEFAULT_MAINTENANCE_PLANtest1      sga_target                     740Mtest1      control_files                  +DATA/test/controlfile/current.529.684067899test1      db_block_size                  8192test1      compatible                     11.1.0.0.0test1      log_archive_configtest1      log_archive_dest_1             LOCATION=/data/oracle/oradata/test/archivelogtest1      log_buffer                     4197376test1      cluster_database               TRUEtest1      cluster_database_instances     3test1      db_create_file_dest            +DATAtest1      thread                         1test1      undo_tablespace                UNDOTBS1test1      undo_retention                 900test1      instance_number                1test1      remote_login_passwordfile      SHAREDtest1      db_domaintest1      plsql_warnings                 DISABLE:ALLtest1      result_cache_max_size          3808Ktest1      core_dump_dest                 /data/oracle/diag/rdbms/test/test1/cdumptest1      audit_file_dest                /data/oracle/admin/test/adumptest1      audit_trail                    DBtest1      db_name                        testtest1      open_cursors                   400test1      optimizer_mode                 ALL_ROWStest1      query_rewrite_enabled          TRUEtest1      pga_aggregate_target           245Mtest1      optimizer_dynamic_sampling     2test1      skip_unusable_indexes          TRUEtest1      diagnostic_dest                /data/oracle

已选择32行。

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

前面介绍了很多种查询初始化参数的方法,其实还有一个方法也是很有用的,就是通过 alert 文件检查数据库加载的所有非默认值的初始化参数。SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startupORACLE 例程已经启动。

Total System Global Area  776896512 bytesFixed Size                  2098776 bytesVariable Size             246077864 bytesDatabase Buffers          524288000 bytesRedo Buffers                4431872 bytes数据库装载完毕。数据库已经打开。

SQL> hostbash-3.00$ tail -200 /data/oracle/diag/rdbms/test/test1/trace/alert_test1.log Sat Jun 13 15:20:03 2009Stopping background process SMCOStopping background process FBDAShutting down instance: further logons disabledShutting down archive processesArchiving is disabled...Sat Jun 13 15:20:19 2009Instance shutdown completeSat Jun 13 15:20:22 2009Some alert messages have been suppressed because they were produced too earlyStarting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0Autotune of undo retention is turned on. LICENSE_MAX_USERS = 0SYS auditing is disabledStarting up ORACLE RDBMS Version: 11.1.0.6.0.Using parameter settings in server-side pfile /data/oracle/product/11.1/database/dbs/inittest1.oraSystem parameters with non-default values:processes                = 150spfile                   = "+DATA/test/spfiletest.ora"sga_target               = 740Mcontrol_files            = "+DATA/test/controlfile/current.529.684067899"db_block_size            = 8192compatible               = "11.1.0.0.0"log_archive_config       = ""log_archive_dest_1       = "LOCATION=/data/oracle/oradata/test/archivelog"cluster_database         = TRUEcluster_database_instances= 3db_create_file_dest      = "+DATA"thread                   = 1undo_tablespace          = "UNDOTBS1"undo_retention           = 900instance_number          = 1remote_login_passwordfile= "SHARED"db_domain                = ""audit_file_dest          = "/data/oracle/admin/test/adump"audit_trail              = "DB"db_name                  = "test"open_cursors             = 500pga_aggregate_target     = 245Mdiagnostic_dest          = "/data/oracle"Cluster communication is configured to use the following interface(s) for this instance172.0.2.62cluster interconnect IPC version:Oracle UDP/IP (generic)IPC Vendor 1 proto 2Sat Jun 13 15:20:23 2009PMON started with pid=2, OS id=19138 Sat Jun 13 15:20:23 2009VKTM started with pid=4, OS id=19140 at elevated priorityVKTM running at (20)ms precisionSat Jun 13 15:20:24 2009DIAG started with pid=6, OS id=19144 Sat Jun 13 15:20:24 2009DBRM started with pid=8, OS id=19146 ...Completed: ALTER DATABASE OPENSat Jun 13 15:20:41 2009Starting background process CJQ0Sat Jun 13 15:20:41 2009CJQ0 started with pid=64, OS id=19434 Setting Resource Manager plan SCHEDULER[0x2C0E]:DEFAULT_MAINTENANCE_PLAN via scheduler windowSetting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter

检查 alert 文件的方法不但可以获取当前实例所有非默认初始化参数的信息,还是初始化参数文件丢失后用来恢复初始化参数文件的一种方法。如何加入"云和恩墨大讲堂"微信群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值