Pergunta

Estou usando o Oracle SQL Developer

Eu tenho um script enorme que cria tabelas, índices, restrições de chave primária e tal.

meu nome de banco de dados é: dbo_other

Eu entrei neste dbo_ther como sysdba.

Se eu executar meu script, as tabelas não aparecem no painel esquerdo em 'mesas'

No entanto, se eu anexar o script adicionando 'dbo_other'. Na frente de cada nome de mesa, as tabelas aparecem.

Isso é muito tedioso e demorado.

Há alguma maneira de evitar isto? Por que eles não aparecem em dbo_other sem adicionar dbo_other. na frente de cada nome de mesa ?? Quando eu corro a consulta no canto superior direito, a suspensão foi selecionada!

Eu posso até fazer uma seleção * da tabela criada (mas não a vejo na barra lateral esquerda) Além disso, posso ver a tabela no desenvolvedor PL/SQL.

Por que o Oracle SQL Developer quer que eu o crie com dbo_other. ??

Além disso, existe uma maneira de evitar adicioná -lo para cada tabela? Talvez algo possa ser feito no topo do script, para que ele consiga tudo o que se segue?

Foi útil?

Solução

Por que você está fazendo login no seu banco de dados usando a conta SYSDBA? Isso é muito poderoso e permitirá que você faça danos terríveis ao seu banco de dados se não souber o que está fazendo. Em um ambiente de desenvolvimento, há um limite para os danos que você pode causar, mas é melhor entrar em bons hábitos antes de fazer as coisas na produção.

O interessante como sysdba é que ele substitui a parte do nome de usuário do login: se o usuário do seu sistema operacional tiver os privilégios, você está. Como sys. Confira:

SQL> conn apc
Enter password:
Connected.
SQL> show user
USER is "APC"
SQL> conn apc as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL>

Então, quando você executou o script, criou todos esses objetos no esquema SYS. O que será uma dor maciça no pescoço. Espero que você tenha um script de reversão igual e oposto.

Para executar o script corretamente, tudo o que você precisa fazer é conectar -se como dbo_other (normal - ou seja, sem sysdba ou sysoper, que é o padrão, afinal). Seu script criará tabelas no esquema atual.

Se você precisar criar objetos em vários esquemas, não precisará sair e entrar novamente. O esquema é distinto do usuário e é possível mudar de esquema executando alter session set current schema = WHOEVR;. Este é um truque bastante útil e eu escrevi por algum tempo atrás. Descubra mais.

Observe que seu usuário não adquirirá privilégios adicionais alterando o esquema atual: eles só poderão fazer o que podem fazer atualmente. Portanto, para algo como criar objetos em vários esquemas, o usuário em execução deve ser um usuário elétrico, alguém com criação de privilégios como um DBA (mas ainda não sysdba).

Outras dicas

Eu apenas tropecei neste pequeno Jem, que permite executar ações em um esquema/usuário por padrão, para o qual você não está conectado. Ou seja, por padrão, suas instruções selecionadas, etc, operarão neste novo esquema em vez de suas.

ALTER SESSÃO SET CURREN_SCHEMA =

Exemplo: eu + tabela1 + tabela 2 alguém + supertable1 + supertable2

log in as "Myself" 
select * from SuperTable1

Error: ORA-00942: table or view does not exist

alter session set current_schema = SomeoneElse 
select * from SuperTable1 <This will work.>

A árvore "Tabelas" no painel esquerdo inclui apenas tabelas que o usuário logado possui no Oracle SQL Developer. Se o seu script criar tabelas no esquema de outro usuário, você precisará clicar no + próximo a "outros usuários", encontre o usuário apropriado e clique no + em suas tabelas.

Como outros disseram, você não deve usar o SYSDBA, a menos que precise, e parece muito parecido com o seu script deve ser executado como um usuário normal com base em sua descrição aproximada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top