Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #102848
    Avatar de wagnerbianwagnerbian
    Participante

      Tudo bem, pessoal?

      Aconteceu uma coisa estranha comigo após instalar uma nova instância do Oracle 11g. Minha intenção foi migrar os esquemas de dois usuários para um novo servidor, mas considerando algumas modificações. No servidor antigo, eu contava com um banco de dados e dois esquemas, como exemplo vou utilizar A e B.

      No servidor antigo, estes esquemas estavam utilizando tablespaces padrão como USERS e TEMP e no novo, gostaria que cada uma dos dois usuários tivesse o seu próprio tablespace padrão, com o nome do usuário e continuassem utilizando o tablepace temporário TEMP (ao qual adicionei mais dois arquivos finalizando com um número de três arquivos de 1024M, cada um).

      Bom, fiz o exp completo do esquema A e B no servidor antigo, criei dois tablespaces no servidor novo e criei os usuários, com os devidos grants para cada um deles, ficando da seguinte forma:

      # user A
      SQL> create user A identified by wb123
      1> default tablespace A
      2> temporary tablespace TEMP;

      SQL> grant exp_full_database, imp_full_database, connect, resource to A;

      # user B
      SQL> create user B identified by wb123
      1> default tablespace B
      2> temporary tablespace TEMP;

      SQL> grant exp_full_database, imp_full_database, connect, resource to B;

      Nesse momento, pensei que o usuário tinha que ter uma quota para escrever no tablespace dele, A ou B.

      SQL> alter user [A | B] quota 2048M on [A | B];

      Nesse momento fiz o imp com o próprio usuário, mas, não consegui encontrar os objetos nos respectivos esquemas.

      Aonde está o erro, poderia orientar??

      Muito obrigado, pessoal, vamo que vamo.

      #102850
      Avatar photoRegis Araujo
      Participante

        @wagnerbian

        Bom dia..!

        Mostre como vc fez o export e import.. Poste os comandos de cada um..

        Abraços..!

        #102852
        Avatar de wagnerbianwagnerbian
        Participante

          Eu não tenho o ambiente real aqui mas vou tentar exempificar o que estou fazendo. Imagine então que tenho o usuário A e um servidor ORCLSRV02, que tem como tablespace default o USERS e como tablespace temporário o TEMP (ou seja, foi criado sem apontar um tablespace individual para os seus objetos).

          SQL> create user a identified by a;

          User created.

          SQL> grant exp_full_database, imp_full_database, resource, connect to a;

          Grant succeeded.

          A intenção agora é migrar os objetos do usuário A para outro servidor, o ORCLSRV01, mas, agora, gostaria de criar um tablespace permanente padrão para ele. Criei um objeto TABLE para o usuário A, somente para testar essa migração:

          SQL> conn a/a
          Connected.
          SQL> create table foo (id int, name varchar2(60));
          Table created.

          SQL> insert into foo values (1,'oracle');
          1 row created.

          SQL> insert into foo values (2,'mysql');
          1 row created.

          SQL> alter table foo add primary key(id);
          Table altered.

          Sendo assim, rodei o exp no servidor ORCLSRV02 para pegar os objetos do usuários A:

          [oracle@orclsrv02 ~]$ exp userid=a/a file=a.dump statistics=none

          Export: Release 11.2.0.1.0 - Production on Sun Feb 19 02:41:21 2012
          Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

          [...]

          About to export specified users ...
          . exporting pre-schema procedural objects and actions
          . exporting foreign function library names for user A
          . exporting PUBLIC type synonyms
          . exporting private type synonyms
          . exporting object type definitions for user A
          About to export A's objects ...
          . exporting database links
          . exporting sequence numbers
          . exporting cluster definitions
          . about to export A's tables via Conventional Path ...
          . . exporting table FOO 2 rows exported
          . exporting synonyms
          . exporting views
          . exporting stored procedures
          . exporting operators
          . exporting referential integrity constraints
          . exporting triggers
          . exporting indextypes
          . exporting bitmap, functional and extensible indexes
          . exporting posttables actions
          . exporting materialized views
          . exporting snapshot logs
          . exporting job queues
          . exporting refresh groups and children
          . exporting dimensions
          . exporting post-schema procedural objects and actions
          . exporting statistics
          Export terminated successfully without warnings.

          Ok, nesse momento o arquivo está lá:

          [oracle@orclsrv02 ~]$ ls -lh
          total 140M
          [...]
          -rw-r--r-- 1 oracle oinstall 139M Feb 19 02:10 wa.dump

          Após dar um scp nesse cara, o pegamos lá no servidor ORCLSRV01 e é hora de fazer o imp, mas agora, quero que os objetos do usuário A, que antes eram parte do tablespace USERS, fiquem em um tablespace permanente do usuário, que chamei de A.

          SQL> create tablespace a datafile 'a.dbf' size 10M autoextend on next 1M maxsize 15M;
          Tablespace created.

          SQL> create user a identified by a default tablespace a temporary tablespace temp quota unlimited on a;
          User created.

          SQL> grant connect, resource, exp_full_database, imp_full_database to a;
          Grant succeeded.

          Ok, nesse momento eu imaginava que era só fazer a importação com o usuário a que a tabela foo já seria criada no tbs a, que é o tbs default do usuário neste novo cenário/servidor.

          [oracle@orclsrv01 ~]$ imp userid=a/a fromuser=a touser=a file=a.dump

          Import: Release 11.2.0.1.0 - Production on Sun Feb 19 03:10:19 2012

          Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

          Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
          With the Partitioning, OLAP, Data Mining and Real Application Testing options

          Export file created by EXPORT:V11.02.00 via conventional path
          import done in US7ASCII character set and AL16UTF16 NCHAR character set
          import server uses AL32UTF8 character set (possible charset conversion)
          . . importing table "FOO" 2 rows imported
          Import terminated successfully without warnings.

          Vamos verificar se criou:

          [oracle@orclsrv01 ~]$ sqlplus a/a

          SQL*Plus: Release 11.2.0.1.0 Production on Sun Feb 19 03:11:10 2012
          Copyright (c) 1982, 2009, Oracle. All rights reserved.

          Connected to:
          Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
          With the Partitioning, OLAP, Data Mining and Real Application Testing options

          SQL> select * from foo;

              ID NAME
          

               1 oracle
               2 mysql
          

          SQL> select count(*) from user_tables;

          COUNT(*)

               1
          

          SQL> SELECT table_name, tablespace_name FROM user_tables;

          TABLE_NAME TABLESPACE_NAME


          FOO USERS

          O default tablespace do usuário não é o A? Como criar os objetos em um novo tablespace? Tenho que alterar isso via SQL?

          SQL> SELECT 'ALTER TABLE ' || table_name || ' MOVE TABLESPACE A;' FROM user_tables;

          'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACEA;'

          ALTER TABLE FOO MOVE TABLESPACE A;

          SQL> ALTER TABLE FOO MOVE TABLESPACE A;
          Table altered.

          SQL> SELECT table_name, tablespace_name FROM user_tables;
          TABLE_NAME TABLESPACE_NAME


          FOO A

          Tem alguma forma de fazer isso automaticamente já no IMP?

          Valeu pessoal, obrigado pela força.[/i]

          #102866
          Avatar de rmanrman
          Participante

            @wagnerbian

            Seguinte, a forma que o EXP/IMP trabalha não é exatamente como você imagina. Não é por que você usou o usuário A para importar que os objetos cairam para o usuário A, o IMP vai voltar como ele estava na origem. 😆

            O que você quer fazer pode ser feito com o DataPump, caso esteja usando o Oracle 10g ou superior, caso seja o 9i ou inferior é possível importar como no original e depois migrar os objetos para a tablespace nova.

            Vamos ser otimista e que você possa usar o DataPump, o mesmo possui 2 parâmetros que é o REMAP_SCHEMA e REMAP_TABLESPACE. Esses 2 parâmetros fazem justamente o que você quer.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress