web-dev-qa-db-fra.com

Schéma d'exportation et d'importation Oracle 12C avec différents espaces de table et d'index de table d'index

Supposons que j'ai exporté les objets de schéma de ma base de données Oracle 12c à l'aide de l'utilitaire d'exportation d'origine ci-dessous:

exp userid=<export_schema_name>/<export_schema_password>@<db_string> file=<file_name>.dmp statistics=none log=<file_name>.log


[.____] L'export_schema_name utilise différents espaces de table pour les données et les index, appelons data_tbs_1 et iDX_TBS_1. Toutes les tables de l'export_schema_name sont créées ci-dessous:

create table <table_name>
(
    -- columns definition
)
tablespace <data_tbs_1>
/
--
alter table <table_name>
add constraint <constraint_name> primary key(<key_name>)
using index tablespace <idx_tbs_1>

Maintenant, je veux importer le fichier de vidage exporté en un nouveau schéma que j'ai créé comme ci-dessous (j'ai déjà créé un nouveau daysespace Dataspace Data_TBS_2):

create user <import_schema_name> identified by <import_schema_password>
default tablespace <data_tbs_2>

La commande ImpORST que je vais utiliser est la suivante:

imp userid=SYSTEM/<import_system_password>@<db_string> file=<file_name>.dmp statistics=none log=<file_name>.log fromuser=<export_schema_name> touser=<import_schema_name>

Mes questions sont:

  1. Si je fais cela, où sont les données et les index dans stocké? Sont-ils toujours dans les données_tbs_1 et idx_tbs_1 o Ils sont tous dans les données_TBS_2.
  2. Si les indices des sont toujours stockés dans IDX_TBS_1, comment puis-je les modifier à un nouvel espace de table d'index (dire iDX_TBS_2) que je vais créer?
2
phamhoangsy2909

Je me demande pourquoi utiliseriez-vous EXP lorsque vous avez des outils plus efficaces et plus performants du FIPDP - sur votre main?

en utilisant IMPDP

Si je fais cela, où sont les données et les index dans stocké? Sont-ils toujours dans les data_tbs_1 et iDX_TBS_1 ou tous dans les données_TBS_2.

Oui. Étant donné que le travail d'importation exécute le DDL pour créer ces tables et que la DDL inclut TABLESPACE clause pour définir où créer le tableau n'est pas l'espace de table par défaut de l'utilisateur. Les objets seront créés dans leur espace de table d'origine, quel que soit l'espace de table par défaut du nouvel utilisateur.

Cela peut être confirmé en exportant le fichier de vidage au fichier SQL. IMPDP commande-

impdp system@orclpdb directory=dp_dir dumpfile=expdp_jay.dmp sqlfile=jay_ddl.sql

Ddl-

Voici un extrait du fichier SQL.

CREATE TABLE "JAY"."TBL1"
   (    "TEXT" VARCHAR2(20 BYTE)
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ; -- Here you can see it has defined the tablespace to create the table.

Si les indices des sont toujours stockés dans IDX_TBS_1, comment puis-je les modifier à un nouvel espace de table d'index (dire iDX_TBS_2) que je vais créer?

Vous pouvez utiliser REMAP_TABLESPACE Paramètre lors de l'importation du dépotoir.

Voici le DDL pour la même table importée avec le REMAP_TABLESPACE clause.

Commande IMPDP-

impdp system@orclpdb directory=dp_dir dumpfile=expdp_jay.dmp sqlfile=jay2_ddl.sql remap_tablespace=USERS:DATA

Ddl-

CREATE TABLE "JAY"."TBL1"
   (    "TEXT" VARCHAR2(20 BYTE)
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "DATA" ;

remap_tablespace

Mettre à jour:

La raison pour laquelle j'utilise toujours les utilitaires d'origine d'origine et IMPI est que ma société a toujours ces données héritées sur la version précédente de la base de données Oracle.

Si tel est le cas, j'importerais les objets dans le même espace de table et que plus tard, je migrerais vers un autre espace de table en utilisant ALTER INDEX REBUILD TABLESPACE <new_tbs> commande.

en utilisant IMP

Si vous devez utiliser l'outil d'importation d'origine, alors-

  • Tout d'abord, vous devez extraire le DDL du fichier de vidage en utilisant
    indexfile Paramètre avec fromuser et touser paramètre (même nom de schéma pour fromuser et touser).

Exemple: imp system@orclpdb file=dumpfile.dmp fromuser=jay touser=jay indexfile=DDL.sql Remarque: il faut des efforts pour éditer le fichier SQL contenant REM mots-clés ainsi que la sortie du nombre de lignes.

Goûter:

[Oracle@oracdbuat fra]$ cat DDL.sql

REM  CREATE TABLE "JAY"."EMP2" ("ID" NUMBER) PCTFREE 10 PCTUSED 40
REM  INITRANS 1 MAXTRANS 255 TABLESPACE "DATALRG" LOGGING NOCOMPRESS ;
REM  ... 0 rows
REM  CREATE TABLE "JAY"."EMPLOYEE" ("ID" NUMBER) PCTFREE 10 PCTUSED 40
REM  INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS
REM  1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE
REM  "USERS" LOGGING NOCOMPRESS ;
REM  ... 0 rows
  • Modifiez le fichier SQL généré par l'outil d'importation pour modifier l'espace de table pour les objets.

  • Exécutez le script SQL en utilisant SQLPLUS.

  • Désactiver toutes les contraintes

  • Importer le fichier de vidage avec le paramètre IGNORE=Y Pour ignorer l'avertissement sur les objets déjà existants.

  • Activer les contraintes.

1
JSapkota