erro: ORA-65096: usuário comum inválido ou nome de função no oracle

118

Acabei de instalar o oracle11g e faltava o esquema Scott. Portanto, estou tentando gerá-lo sozinho. Peguei o script sql do esquema "Scott", mas quando tento executar a consulta "criar usuário Scott identificado pelo tigre;" ele exibe o seguinte erro:

ORA-65096: usuário comum inválido ou nome de função no oracle.

Basicamente, ele não está me permitindo criar um usuário "Scott". Por que isso acontece e como posso resolver meu problema?

enu
fonte
8
Isso é impossível de incluir 11g, você deveria estar ligado 12c.
Lalit Kumar B,
Talvez você tenha instalado um cliente 11g, mas está se conectando a um banco de dados 12c? O que exatamente você instalou?
Alex Poole,
1
Anexe C ## antes do nome de usuário.
Sathvik

Respostas:

344

PERIGO

A definição de parâmetros não documentados como este (conforme indicado pelo sublinhado inicial) só deve ser feita sob a orientação do Suporte Oracle. Alterar esses parâmetros sem tal orientação pode invalidar seu contrato de suporte. Portanto, faça isso por sua própria conta e risco.

Especificamente, se você definir "_ORACLE_SCRIPT"=true , algumas alterações no dicionário de dados serão feitas com a coluna ORACLE_MAINTAINED definida como 'Y'. Esses usuários e objetos serão excluídos incorretamente de alguns scripts DBA. E eles podem ser incluídos incorretamente em alguns scripts do sistema.

Se você concorda com os riscos acima e não deseja criar usuários comuns da maneira correta, use a resposta abaixo.


Antes de criar o usuário, execute:

alter session set "_ORACLE_SCRIPT"=true;  

Eu encontrei a resposta aqui

Dr. Alchemy
fonte
6
Esteja ciente de que é um parâmetro oculto e deve ser usado somente quando recomendado pelo suporte da Oracle.
Lalit Kumar B
5
É perigoso usar parâmetros de sublinhado (ocultos) em sistemas de produção, pois isso pode invalidar seu contrato de suporte. Portanto, você deve aconselhar as pessoas a defini-los sem dar o aviso apropriado.
APC de
3
isso está errado e não é suportado no oracle, usei e causou outros problemas internos.
Firas Nizam de
1
Funciona no Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Vitalie
2
@Victor - Porque só podemos alterá-los quando instruídos a fazê-lo pelo Suporte Oracle. Como eu disse, definir parâmetros não documentados por nossa própria conta pode invalidar nosso contrato de suporte. De maneira mais geral, as configurações padrão do Oracle para parâmetros documentados e não documentados geralmente são adequadas para todos os aplicativos e não precisam ser alteradas. Ajustar os parâmetros de sublinhado atrai pessoas que gostam da emoção do acesso arcano, que é a pior razão para ajustá-los. Mas se você não tem um contrato de suporte com o qual se preocupar, você está livre para arriscar danificar seu sistema da maneira que quiser ;-)
APC
56

Acabei de instalar o oracle11g

ORA-65096: usuário comum inválido ou nome de função no oracle

Não, você instalou o Oracle 12c . Esse erro só pode estar ativado 12ce não pode estar ativado 11g.

Sempre verifique a versão do seu banco de dados com até 4 casas decimais:

SELECT banner FROM v$version WHERE ROWNUM = 1;

O banco de dados de contêiner multitenant Oracle 12c tem:

  • um contêiner raiz ( CDB )
  • e / ou zero, um ou vários bancos de dados conectáveis ​​( PDB ).

Você deve ter criado o banco de dados como um banco de dados de contêiner . Enquanto estiver tentando criar um usuário no container, ou seja, CDB $ ROOT , você deve criar o usuário no banco de dados PLUGGABLE .

Você não deve criar objetos relacionados ao aplicativo no contêiner, pois o contêiner contém os metadados para os bancos de dados conectáveis. Você deve usar o banco de dados conectável para as operações gerais do banco de dados. Caso contrário, não o crie como contêiner e não use multilocação . No entanto, 12cR2 em diante, você não pode criar um banco de dados não contêiner de qualquer maneira.

E muito provavelmente, os esquemas de amostra já podem ter sido instalados, você só precisa desbloquear los no banco de dados conectável.

Por exemplo, se você criou um banco de dados plugável como pdborcl:

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"

Para mostrar os PDBs e se conectar a um banco de dados plugável do contêiner raiz:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

Sugiro ler, Passos obrigatórios pós-instalação do Oracle 12c


Nota : Respostas que sugerem o uso do _ORACLE_SCRIPTparâmetro oculto para definir como verdadeiro são perigosas em um sistema de produção e também podem invalidar seu contrato de suporte. Cuidado, sem consultar o suporte da Oracle, NÃO use parâmetros ocultos .

Lalit Kumar B
fonte
O link acima "Etapas obrigatórias pós-instalação do Oracle 12c" está quebrado. Novo link: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri
@Heri Tem certeza? Porque está funcionando bem as etapas obrigatórias pós-instalação do Oracle 12c
Lalit Kumar B
47

No Oracle 12c e superior, temos dois tipos de bancos de dados:

  1. Container DataBase (CDB), e
  2. Base de dados conectável (PDB).

Se quiser criar um usuário, você tem duas possibilidades:

  1. Você pode criar um "usuário de contêiner", também conhecido como "usuário comum".
    Os usuários comuns pertencem aos CBDs, bem como aos PDBs atuais e futuros. Isso significa que eles podem realizar operações em Container DBs ou Pluggable DBs de acordo com os privilégios atribuídos.

    create user c##username identified by password;

  2. Você pode criar um "usuário conectável" ou "usuário local".
    Os usuários locais pertencem apenas a um único PDB. Esses usuários podem receber privilégios administrativos, mas apenas para o PDB dentro do qual eles existem. Para isso, você deve se conectar a um datable plugável assim:

    alter session set container = nameofyourpluggabledatabase;

    e aí, você pode criar usuário como normalmente:

    create user username identified by password;

Não se esqueça de especificar o (s) espaço (s) de tabela a usar, pode ser útil durante a importação / exportação de seus bancos de dados. Veja isto para obter mais informações sobre isso https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

Steve Ruben
fonte
O estilo desta resposta é meu favorito, rápido de usar.
Zhiyong
1

alterar conjunto de sessões "_ORACLE_SCRIPT" = verdadeiro;

criar o usuário sec_admin identificado por "Chutinhbk123 @!";

Tinh Xuan
fonte
-1

Criar dependência do usuário nas ferramentas de conexão de banco de dados

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer
Balavenkareddy
fonte
3
Você poderia formatar seu código corretamente e fornecer algum contexto por que isso resolve o problema melhor do que as outras respostas?
Nico Haase
-1

Pode ser uma alternativa mais segura "_ORACLE_SCRIPT"=truepara mudar "_common_user_prefix"de C##para uma string vazia. Quando é nulo - qualquer nome pode ser usado para o usuário comum. Encontrado .

Durante a alteração desse valor você pode enfrentar outro problema - ORA-02095 - parâmetro não pode ser modificado, que pode ser corrigido de várias maneiras, com base na sua configuração ( fonte ).

Então, para mim funcionou:

alter system set _common_user_prefix = ''; scope=spfile;
Poliglota
fonte