检查oracle sid和数据库名称


115

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

我正在使用以下查询来检查oracle SID

select instance from v$thread;

但表或视图不存在错误即将到来。

我正在使用以下查询来检查当前数据库名称

select name from v$database;

但表或视图不存在错误即将到来。

对以上两个问题有任何想法吗?

Answers:


148

我想SELECT user FROM dual;应该给你当前的用户

SELECT sys_context('userenv','instance_name') FROM dual;实例的名称

我相信你可以得到SID作为 SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
感谢您的快速响应。实例和oracle SID是否相同?
阿德南

2
@Adnan他们不一定是相同的,因为有coould是它们由SID标识的单个计算机上运行的数据库的多个实例
V4Vendetta

@adnan是否获得了所需的值?
V4仇杀队2011年

8
select sys_context('userenv','db_name') from dual;对于数据库名称和sid,我已经在答案中添加了。希望这能给您您想要的东西
V4仇杀队2011年

2
请检查此链接
V4Vendetta

57

如果像我一样,您的目标是获取数据库主机和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;

参加 塞尔吉奥·马塞洛(Sergio Marcelo)


完善。这正是我想知道的,但不知道该如何说。
Addison

我也是。谢谢塞尔吉奥!
horseatingweeds 17-4-5的

48

仅出于完整性考虑,您还可以使用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

上面的查询不需要特殊的权限。通过仅创建具有CONNECT特权的新用户进行验证。
bdeem

22

V $视图主要是系统指标的动态视图。它们用于性能调优,会话监视等。因此,默认情况下,访问仅限于DBA用户,这就是为什么要这样做ORA-00942

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

select * from global_name;

该视图已授予PUBLIC,因此任何人都可以查询它。


oracle SID呢?有什么方法可以从斯科特账户中进行检查吗?
阿德南

1
那是服务名称,而不是SID。
jpmc26

5

sqlplus命令提示符下键入

SQL> select * from global_name;

然后您将在命令提示符下看到结果

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

在这里,第一个“ ORCL”是数据库名称,可能是您的系统“ XE”以及其他在oracle下载时给出的名称。


谢谢,您过得很愉快。
Muhammad Ashikuzzaman 2015年

2

如上所述,

select global_name from global_name;

是要走的路。

您无法查询v $ database / v $ instance / v $ thread,因为您的用户没有所需的权限。您可以通过以下方式(通过DBA帐户)授予它们:

grant select on v$database to <username here>;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.