Oracle

Movendo usuários entre bases

Um pequeno lembrete para mim. Estou migrando do Oracle 9i para o 10g utilizando export e import.

O export por esquema “exp… owner… ” não traz para o Oracle 10g os usuários, portanto a importação irá falhar. O jeito é exportar primeiro os usuários. O procedimento é simples, basta puxar os usuários da tabela ‘dba_users’, mas um pequeno detalhe deve ser observado na importação da senha.

Segue o script:

SELECT
    'CREATE USER ' || username || ' IDENTIFIED BY VALUES ''' || password ||
    ''' DEFAULT TABLESPACE ' || default_tablespace || ';'
  FROM dba_users
  WHERE
    password != 'EXTERNAL' AND
    password != 'GLOBAL' AND
    default_tablespace NOT IN ('EXAMPLE','DRSYS','CWMLITE','ODM','XDB','SYSTEM')
  ORDER BY default_tablespace, username
;

SELECT
  'CREATE USER ' || username || ' IDENTIFIED BY EXTERNAL DEFAULT TABLESPACE ' || default_tablespace || ';'
  FROM dba_users
  WHERE password = 'EXTERNAL'
;

SELECT
  'CREATE USER ' || username || ' IDENTIFIED GLOBALLY AS ''' || external_name ||
  ''' DEFAULT TABLESPACE ' || default_tablespace || ';'
  FROM dba_users
  WHERE password = 'GLOBAL'
;

SELECT 'ALTER USER ' || username || ' QUOTA UNLIMITED ON ' || tablespace_name || ';'
  FROM dba_ts_quotas;

Não é nada complexo, mas o detalhe está justamente no uso da senha criptografada. Na documentação da Oracle sobre o comando CREATE USER, não aparece nada sobre a opção de criar um usuário com uma senha criptografada, somente com uma senha normal, que precisa clausula ‘VALUES’. Bom… demorei para lembrar deste pequeno detalhe, agora não esqueço mais! 😉

No Comments

Leave a Reply

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.