检查oracle sid和数据库名称
我想检查SID和当前的数据库名称。
我正在使用以下查询来检查Oracle SID
select instance from v$thread;
但表或视图不存在错误即将到来。
我正在使用以下查询来检查当前的数据库名称
select name from v$database;
但表或视图不存在错误即将到来。
以上两个问题的任何想法?
我认为select user from dual;
应该给你当前的用户
并select sys_context('userenv','instance_name') from dual;
实例的名称
我相信你可以得到SID作为SELECT sys_context('USERENV', 'SID') FROM DUAL;
( 现在不能检查这个 )
为了完整起见,您还可以使用ORA_DATABASE_NAME。
值得注意的是,并不是所有的方法都能给出相同的结果:
SQL> select sys_context('userenv','db_name') from dual; SYS_CONTEXT('USERENV','DB_NAME') -------------------------------------------------------------------------------- orcl SQL> select ora_database_name from dual; ORA_DATABASE_NAME -------------------------------------------------------------------------------- ORCL.XYZ.COM SQL> select * from global_name; GLOBAL_NAME -------------------------------------------------------------------------------- ORCL.XYZ.COM
如果像我一样,你的目标是获取数据库主机和SID来生成Oracle JDBC URL,如
jdbc:oracle:thin:@<server_host>:1521:<instance_name>
以下命令将有所帮助:
Oracle查询命令来检查SID(或实例名称):
select sys_context('userenv','instance_name') from dual;
Oracle查询命令来检查数据库名称(或服务器主机):
select sys_context('userenv', 'server_host') from dual;
ATT。 塞尔吉奥·马塞洛
V $视图主要是系统度量的dynamic视图。 它们用于性能调优,会话监控等。因此默认情况下,访问仅限于DBA用户,这就是为什么你得到ORA-00942
。
find数据库名称的最简单的方法是:
select * from global_name;
这个视图被授予PUBLIC,所以任何人都可以查询它。
inputsqlplus
命令提示符
SQL> select * from global_name;
那么你会看到命令提示符的结果
SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
这里第一个“ORCL”是数据库名称,可能是你的系统“XE”和其他oracle上下载的时间。
如上所述,
select global_name from global_name;
是要走的路。
您无法查询v $ database / v $ instance / v $线程,因为您的用户没有所需的权限。 您可以(通过DBA帐户)授予他们:
grant select on v$database to <username here>;