我想检查SID和当前数据库名称。
我正在使用以下查询来检查oracle SID
select instance from v$thread;
但表或视图不存在错误即将到来。
我正在使用以下查询来检查当前数据库名称
select name from v$database;
但表或视图不存在错误即将到来。
对上述两个问题有任何想法吗?
答案 0 :(得分:127)
我认为select user from dual;
应该为您提供当前用户
和select sys_context('userenv','instance_name') from dual;
实例的名称
我相信你可以获得SELECT sys_context('USERENV', 'SID') FROM DUAL;
的SID( 现在无法检查 )
答案 1 :(得分:51)
如果像我一样,您的目标是获取数据库主机和SID以生成Oracle JDBC URL,如
jdbc:oracle:thin:@<server_host>:1521:<instance_name>
以下命令将有所帮助:
用于检查SID(或实例名称)的Oracle查询命令:
select sys_context('userenv','instance_name') from dual;
用于检查数据库名称(或服务器主机)的Oracle查询命令:
select sys_context('userenv', 'server_host') from dual;
ATT。 塞尔吉奥马塞洛
答案 2 :(得分:44)
为了完整起见,您还可以使用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
答案 3 :(得分:19)
V $视图主要是系统指标的动态视图。它们用于性能调整,会话监控等。默认情况下,访问仅限于DBA用户,这就是您获得ORA-00942
的原因。
查找数据库名称的最简单方法是:
select * from global_name;
此视图已授予PUBLIC,因此任何人都可以查询它。
答案 4 :(得分:4)
键入sqlplus
命令提示符
SQL> select * from global_name;
然后你将在命令提示符
上看到结果SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
这里第一个&#34; ORCL&#34;是数据库名称,可能是您的系统&#34; XE&#34;以及oracle下载时间的其他内容。
答案 5 :(得分:2)
如上所述,
select global_name from global_name;
是要走的路。
您无法查询v $ database / v $ instance / v $ thread,因为您的用户没有所需的权限。您可以通过以下方式授予他们(通过DBA帐户)
grant select on v$database to <username here>;
答案 6 :(得分:0)
从v $ database中选择名称;
从v $ instance中选择instance_name;