版本说明
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