Questão 24 - HCPA 2009/3 - ANALISTA DE SISTEMAS I (ADMINISTRADOR DE BANCO DE DADOS)
questão 24 consulta oracle DB_LINKs
Veja abaixo a resposta correta da questão e uma breve análise sobre o conteúdo.
Com base em seus conhecimentos em ORACLE8i SQL Reference e sabendo que a “USER_TAB_COLUMNS” é uma tabela do dicionário de dados que traz as informações de todas as tabelas do usuário conectado, analise o comando abaixo.
SQL> GET QUERY1.SQL
01 SELECT TB1.TABLE_NAME, TB1.COLUMN_ID, TB1.COLUMN_NAME, TB1.DATA_TYPE,
02 TB1.DATA_PRECISION, TB1.DATA_LENGTH, TB1.DATA_SCALE
03 FROM USER_TAB_COLUMNS@SECU TB1,
04 USER_TAB_COLUMNS TB2
05 WHERE TB1.TABLE_NAME = 'TAB_DEPTOS'
06 AND TB1.TABLE_NAME = TB2.TABLE_NAME
07 AND TB1.COLUMN_NAME = TB2.COLUMN_NAME
08 AND ( TB1.DATA_TYPE <> TB2.DATA_TYPE OR
09 TB1.DATA_PRECISION <> TB2.DATA_PRECISION OR
10 TB1.DATA_SCALE <> TB2.DATA_SCALE OR
11 TB1.DATA_LENGTH <> TB2.DATA_LENGTH )
12* ORDER BY 2
SQL> /
SQL> DESC TAB_DEPTOS
TABLE_NAME COLUMN_ID COLUMN_NAME DATA_TYPE DATA_PRECISION DATA_LENGTH DATA_SCALE
---------------- --------------- ------------------- -------------- ---------------------- ------------------ ----------------
TAB_DEPTOS 2 DESCRICAO VARCHAR2 100
Onde, SECU é um nome de DB_LINK (no banco de “INSTANCE NAME” = PRIM) com USERNAME diferente do
USERNAME ao qual se executam os comandos acima na instance name = PRIM (suponha que as tabelas
USER_TAB_COLUNS possuem apenas os campos definidos no SELECT).
Após a análise do comando e do resultado obtido, é correto afirmar que
(A) esse comando faz JOIN com duas tabelas localizadas em bancos de dados diferentes e que o
USER_TAB_COLUMNS@SECU referencia a estrutura do username definido no DB_LINK SECU.
(B) se alterássemos a cláusula “FROM USER_TAB_COLUMNS@SECU“ (linha 3) substituindo-a por “FROM
USER_TAB_COLUMNS”, o resultado não se modificaria.
(C) esse comando compara os campos de duas tabelas diferentes, e verificou-se que havia somente um campo diferente
para a tabela de nome “TAB_DEPTOS”.
(D) o resultado obtido não possibilita afirmar que só exista este único campo “DESCRICAO” diferente entre as
TABELAS “TAB_DEPTOS” da INSTANCE PRIM e da “TAB_DEPTOS” apontadas pelo DB_LINK SECU.
(E) a cláusula “ORDER BY 2” (linha 12) não é válida, visto que há duas tabelas diferentes que possuem os mesmos
campos. Diante disso, dever-se-ia usar “ORDER BY TAB1.COLUMN_ID”.
Analisando o comando SQL e as afirmações fornecidas:
A consulta SQL realiza um join entre duas instâncias de USER_TAB_COLUMNS, uma local e outra através de um banco de dados remoto (DB_LINK SECU), para comparar a estrutura das tabelas.
O DB_LINK SECU é um link de banco de dados que conecta a instância atual a outra instância remota.
A consulta compara as definições das colunas das tabelas, verificando se há discrepâncias nos tipos de dados, precisão, escala e comprimento.
A tabela TAB_DEPTOS é descrita antes da execução do comando SQL.
Analisando as afirmações fornecidas:
A) Incorreto: O comando faz referência a uma tabela em um banco de dados remoto através do DB_LINK SECU, mas o USER_TAB_COLUMNS@SECU referencia a estrutura das tabelas na instância remota, não do usuário local.
B) Incorreto: Substituir USER_TAB_COLUMNS@SECU por USER_TAB_COLUMNS resultaria em uma consulta apenas na tabela local USER_TAB_COLUMNS, ignorando as informações da instância remota. Isso modificaria significativamente o resultado da consulta.
C) Incorreto: A consulta verifica todas as colunas e não apenas uma. Além disso, a comparação não se limita à tabela TAB_DEPTOS.
D) Correto: O resultado da consulta não permite concluir que só há um campo diferente entre as tabelas TAB_DEPTOS na instância PRIM e na instância apontada pelo DB_LINK SECU. Pode haver mais campos diferentes que não foram incluídos na análise.
E) Incorreto: A cláusula ORDER BY 2 é válida, pois ordena os resultados com base na segunda coluna selecionada na consulta (COLUMN_ID). Não há necessidade de alteração.
Resposta correta:
Portanto, a alternativa correta é a D).
Assunto:
O assunto abordado na questão está relacionado ao uso de consultas SQL para comparar a estrutura das tabelas em diferentes instâncias do banco de dados Oracle, incluindo o uso de DB_LINKs para acessar bancos de dados remotos. Isso envolve o conhecimento sobre as tabelas do dicionário de dados do Oracle e como realizar comparações entre elas.
Nível de dificuldade
O nível de dificuldade da questão é intermediário a avançado, pois exige conhecimento sólido sobre consultas SQL, uso de DB_LINKs, e compreensão das estruturas de tabelas em diferentes instâncias.
Oracle 12C
Quanto ao Oracle 12c, os conceitos e a sintaxe para consultas utilizando DB_LINKs e comparações de estruturas de tabelas são os mesmos que no Oracle 9i. Portanto, as habilidades necessárias para resolver essa questão seriam aplicáveis ao Oracle 12c da mesma forma.
Leia mais em: iretoaoponto-tech.com.br/conc...