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:
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" ;
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-
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.