2011-06-09 94 views
73

我想检查SID和当前数据库名称。检查Oracle sid和数据库名称

我使用下面的查询检查的Oracle SID

select instance from v$thread; 

但表或视图不存在错误来了。

我使用下面的查询检查当前数据库名

select name from v$database; 

但表或视图不存在错误来了。

以上两个问题的任何想法?

回答

93

我相信select user from dual;应该给你当前用户

select sys_context('userenv','instance_name') from dual;实例

的名字,我相信你可以得到SID为SELECT sys_context('USERENV', 'SID') FROM DUAL; 不能检查这个现在

+0

感谢您的快速回复。实例和oracle SID一样吗? – Adnan 2011-06-09 04:49:15

+2

@Adnan他们不需要是相同的,因为可以在单个机器上运行的数据库的多个实例通过SID确定 – V4Vendetta 2011-06-09 04:51:34

+0

@adnan您是否得到了所需的值? – V4Vendetta 2011-06-09 05:08:09

18

V $视图主要是系统度量的动态视图。它们用于性能调整,会话监控等。因此,默认情况下访问仅限于DBA用户,这就是为什么您要获得ORA-00942

查找数据库名称的最简单的方法是:

select * from global_name; 

这一观点被授予PUBLIC,所以任何人都可以查询。

+0

有关oracle SID的内容?是否有任何方法从斯科特账户中检查它? – Adnan 2011-06-09 08:59:42

1

正如上面提到,

select global_name from global_name; 

是要走的路。

您无法查询v $ database/v $ instance/v $线程,因为您的用户没有所需的权限。您可以(通过DBA账户)授予他们:

grant select on v$database to <username here>; 
40

只是为了完整性,您还可以使用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 
+0

上述查询不需要特殊权限。仅通过创建具有CONNECT权限的新用户进行验证。 – bdeem 2015-08-03 15:18:33

41

如果像我一样,你的目标是获得数据库主机和SID生成一个甲骨文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。 塞尔吉奥·马塞洛

+0

完美。这正是我想知道的,但不知道如何表达。 – Addison 2016-07-20 07:13:35

+0

我也是。谢谢塞尔吉奥! – horseatingweeds 2017-04-05 22:31:58

4

类型上sqlplus命令提示符

SQL> select * from global_name; 

则u会看到结果在命令提示符下

SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM 

这里第一个“ORCL”是数据库的名称,可能是你的系统“ XE“以及其他关于oracle下载时间的内容。

+0

谢谢,你让我的一天。 – 2015-11-04 10:25:30