我想要检查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;
则是实例的名称
我相信你可以通过 SELECT sys_context('USERENV', 'SID') FROM DUAL;
得到 SID
select sys_context('userenv','db_name') from dual;
来获取。希望这能满足您的需要。 - V4Vendetta如果像我一样,你的目标是获取数据库主机和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. Sergio Marcelo
仅为完整性起见,您也可以使用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
V$视图主要是系统指标的动态视图。它们用于性能调整、会话监视等。因此,默认情况下只有DBA用户可以访问,这就是为什么您正在收到ORA-00942
错误的原因。
找到数据库名称最简单的方法是:
select * from global_name;
这个视图被授予给PUBLIC,因此任何人都可以查询它。
在 sqlplus
命令提示符上输入命令
SQL> select * from global_name;
SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
这里的第一个“ORCL”是数据库名称,可能是您系统上下载 Oracle 时提供的“XE”或其他名称。
SELECT sys_context('USERENV', 'SID') FROM DUAL;
但请注意,这显示您当前的会话ID,并且在每次连接到数据库时都会更改。SELECT sys_context('userenv','instance_name') FROM dual;
SERVICE_NAME = select sys_context('userenv','service_name') from dual;
select global_name from global_name;
这是正确的方式。
您无法查询v$database/v$instance/v$thread,因为您的用户没有所需的权限。您可以通过DBA账户授予它们:
grant select on v$database to <username here>;
SELECT sys_context('userenv','instance_name') FROM dual;
从双重表中选择sys_context('userenv','instance_name')