Oracle | 普通用户查看v$parameter参数值

在Oracle11.2.0.4版本中,普通用户因权限限制无法直接查询v$视图获取数据库参数,如db_block_size。本文介绍了一种通过创建get_param函数的方法,允许普通用户间接访问部分数据库参数。然而,此方法对于查看内存相关参数仍然受限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       版本说明

Oracle 11.2.0.4

      普通用户登录数据库后,在未授权查询v$视图的情况下无法对数据库参数进行查看,比如查看db_block_size会报出“表或视图存在”的错误提示信息。

[oracle@tank1 ~]$ sqlplus scott/tiger

SCOTT@TANK> select value from v$parameter where name = 'db_block_size';

select value from v$parameter where name = 'db_block_size'

*

ERROR at line 1:

ORA-00942: table or view does not exist

SCOTT@TANK> show parameter db_block_

ORA-00942: table or view does not exist

SCOTT@TANK>

       Oracle提供了所用用户可以使用的API,通过这个API可以查看到v$parameter的内容,执行以下代码创建get_param函数。

create or replace 
function get_param( p_name in varchar2 )
return varchar2
as
    l_param_type  number;
    l_intval      binary_integer;
    l_strval      varchar2(256);
    invalid_parameter exception;
    pragma exception_init( invalid_parameter, -20000 );
begin
    begin
        l_param_type := 
        dbms_utility.get_parameter_value
        ( parnam => p_name, 
            intval => l_intval,
          strval => l_strval );
    exception
        when invalid_parameter
        then
            return '*access denied*';
    end;
    if ( l_param_type = 0 )
    then
        l_strval := to_char(l_intval);
    end if;
    return l_strval;
end get_param;
/

       创建完成后使用scott用户查询参数。

SCOTT@TANK> set serveroutput on

SCOTT@TANK> exec dbms_output.put_line(get_param('db_block_size'));

8192



PL/SQL procedure successfully completed.

       此方法不适用于普通用户查看内存相关参数。

SCOTT@TANK> exec dbms_output.put_line( get_param( 'pga_aggregate_target' ) );

*access denied*



PL/SQL procedure successfully completed.

       如需查看全部受限的参数,通过如下脚本进行查询。

SCOTT@TANK> conn / as sysdba

Connected.

SYS@TANK> column name format a40
SYS@TANK> column val format a40
SYS@TANK> set linesize 200 pages 999

select name, scott.get_param( name ) val
from v$parameter
where scott.get_param( name ) = '*access denied*';SYS@TANK> SYS@TANK> 2 3



NAME VAL

---------------------------------------- ----------------------------------------

sga_max_size *access denied*

shared_pool_size *access denied*

large_pool_size *access denied*

java_pool_size *access denied*

streams_pool_size *access denied*

shared_pool_reserved_size *access denied*

sga_target *access denied*

memory_target *access denied*

memory_max_target *access denied*

db_cache_size *access denied*

db_2k_cache_size *access denied*

db_4k_cache_size *access denied*

db_8k_cache_size *access denied*

db_16k_cache_size *access denied*

db_32k_cache_size *access denied*

db_keep_cache_size *access denied*

db_recycle_cache_size *access denied*

db_flash_cache_size *access denied*

db_recovery_file_dest_size *access denied*

result_cache_max_size *access denied*

pga_aggregate_target *access denied*

client_result_cache_size *access denied*

client_result_cache_lag *access denied*

olap_page_pool_size *access denied*



24 rows selected.

       参考资料

《Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构(第2版)》Thomas Kyte,P62-64

 

Tank

2019.7.31

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值