Verificando o sid do oracle e o nome do banco de dados

115

Quero verificar o SID e o nome do banco de dados atual.

Estou usando a seguinte consulta para verificar o oracle SID

select instance from v$thread;

mas a tabela ou visualização não existe, o erro está chegando.

Estou usando a seguinte consulta para verificar o nome do banco de dados atual

select name from v$database;

mas a tabela ou visualização não existe, o erro está chegando.

Alguma ideia para os dois problemas acima?

Adnan
fonte

Respostas:

148

Presumo que SELECT user FROM dual;deva fornecer o usuário atual

e SELECT sys_context('userenv','instance_name') FROM dual;o nome da instância

Eu acredito que você pode obter SID como SELECT sys_context('USERENV', 'SID') FROM DUAL;

V4Vendetta
fonte
1
Obrigado pela resposta rápida. SID instância e oracle são a mesma coisa?
Adnan
2
@Adnan Eles não precisam ser os mesmos, pois deve haver várias instâncias do banco de dados em execução em uma única máquina, eles são identificados por SID
V4Vendetta
@adnan Você obteve os valores de que precisava?
V4Vendetta
8
select sys_context('userenv','db_name') from dual;para nome de banco de dados e sid eu já adicionei na resposta. espero que isso dê a você o que você deseja
V4Vendetta
2
Verifique este link
V4Vendetta
57

Se, como eu, seu objetivo é fazer com que o host do banco de dados e SID gere um url Oracle JDBC, como

jdbc:oracle:thin:@<server_host>:1521:<instance_name>

os seguintes comandos ajudarão:

Comando de consulta do Oracle para verificar o SID (ou nome da instância):

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

Comando de consulta do Oracle para verificar o nome do banco de dados (ou host do servidor):

select sys_context('userenv', 'server_host') from dual;

Att. Sergio Marcelo

Sergio MC Figueiredo
fonte
Perfeito. Isso é exatamente o que eu queria saber, mas não sabia como dizer.
Addison
Eu também. Obrigado Sergio!
ervas daninhas de
48

Apenas para completar, você também pode usar ORA_DATABASE_NAME.

Pode ser interessante notar que nem todos os métodos fornecem a mesma saída:

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
Patrick Marchand
fonte
Nenhuma permissão especial é necessária para as consultas acima. Verificado criando um novo usuário com privilégio CONNECT apenas.
bdeem
22

As visualizações V $ são principalmente visualizações dinâmicas de métricas do sistema. Eles são usados ​​para ajuste de desempenho, monitoramento de sessão, etc. Portanto, o acesso é limitado a usuários DBA por padrão, e é por isso que você está obtendo ORA-00942.

A maneira mais fácil de encontrar o nome do banco de dados é:

select * from global_name;

Esta visualização é concedida a PUBLIC, para que qualquer pessoa possa consultá-la.

APC
fonte
O que é sobre o oracle SID? Existe algum método para verificar na conta scott?
Adnan
1
Esse é o nome do serviço, não o SID.
jpmc26
5

Digite no sqlplusprompt de comando

SQL> select * from global_name;

então você verá o resultado no prompt de comando

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

Aqui primeiro um "ORCL" é o nome do banco de dados, pode ser o seu sistema "XE" e outro que foi informado no momento do download do oracle.

anant kumar
fonte
Obrigado, você fez o meu dia.
Muhammad Ashikuzzaman
2

Como foi mencionado acima,

select global_name from global_name;

é o caminho a percorrer.

Você não pode consultar v $ database / v $ instance / v $ thread porque seu usuário não tem as permissões necessárias. Você pode concedê-los (por meio de uma conta DBA) com:

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