Criando um usuário comum no Oracle 12c sem o prefixo C##

A partir da versão 12c a Oracle introduziu várias mudanças na "arquitetura", o que influenciou inclusive na criação de usuários no banco de dados. 
Agora ao criar um usuário, podemos definir se este é um local user, ou seja, um usuário que existe apenas em um PDB ou um common user, que é um usuário existente em todos os PDB's e CDB's.

Para mais informações a respeito desta arquitetura no que tange a usuários, sugiro a leitura do artigo Tudo o que você precisa saber sobre o Common e o Local no Oracle Database 12c que explica a mesma, de uma forma bastante completa.

Vale destacar a existência das seguintes restrições na criação de usuários nesta nova arquitetura:
  • O nome dos usuários comuns (common users) devem sempre iniciar com C## ou c##;
  • Usuários locais (local users), não podem iniciar com C## ou c##;
  • Usuários e roles não podem ter o mesmo nome;

Apesar do nome dos usuários comuns terem sempre que iniciar com os caracteres C## ou c##, existe a possibilidade de criar um usuário comum sem esses caracteres. 
O exemplo abaixo utiliza-se da alteração de um parâmetro oculto. Para alteração de qualquer parâmetro oculto, sempre consulte o suporte da Oracle
[oracle@lamimtst12c: cdbtst1 ~] $ sqlplus

SQL*Plus: Release 12.1.0.2.0 Production on Wed Mar 15 13:10:06 2017

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter user-name: / as sysdba

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

cdbtst1@CDB$ROOT> create user lamim identified by lamim container=all;
create user lamim identified by lamim container=all
            *
ERROR at line 1:
ORA-65096: invalid common user or role name


cdbtst1@CDB$ROOT> alter session set "_ORACLE_SCRIPT"=true;

Session altered.

cdbtst1@CDB$ROOT> create user lamim identified by lamim container=all;

User created.

cdbtst1@CDB$ROOT> col USERNAME for a20
cdbtst1@CDB$ROOT> set lines 190
cdbtst1@CDB$ROOT>  select USERNAME,COMMON from dba_users where username='LAMIM';

USERNAME             COM
-------------------- ---
LAMIM                YES

cdbtst1@CDB$ROOT>

Comentários

  1. Olá, Lamin
    Essa dica me ajudou hoje na criação de um usuário no Oracle XE 18c.

    O que achei intrigante foi que ao tentar criar pelo Enterprise Manager, ele deu o mesmo erro. Teoricamente o EM deveria fazer essa tratativa também.

    ResponderExcluir
  2. "_ORACLE_SCRIPT"=TRUE PARAMETER Should not be Invoked by Users (Doc ID 2378735.1)

    ResponderExcluir
  3. Lamim, Muito obrigado!!! cara, tava quebrando a cabeça aqui acostumado a moda antiga ainda.

    ResponderExcluir

Postar um comentário