# 요약
  # Export : Tablespace Level
# Import : Tablespace Level

# 논리적 디렉터리
CREATE DIRECTORY pump_dir AS '/home/oracle/data_pump';
GRANT READ, WRITE ON DIRECTORY pump_dir TO hr;
DROP DIRECTORY pump_dir;

■ Data Pump : expdp, impdp
# Export : 특정 테이블 추출
# Export : Schema Level, 특정 개체 제외
# Export : Schema Level, 특정 개체 다중 제외
# Export : schema에서 테이블만 가져오기
# Export : 소유자 및 테이블스페이스 변경(remap)
# Export : 특정 테이블의 데이터 조건부 추출(query)
# Export : 원격DB에서 특정 소유자의 모든 객체 가져오기(DB Link)
# Import : 특정 테이블만 가져오기
# Import : 테이블이 있는 상태에서 데이터만 가져오기
# Import : 테이블구조만 가져오기
# Import : 다른 테이블로 데이터 가져오기(remap)
# Import : 테이블스페이스 변경, 권한제외
# Import : 모든 객체의 소유자 및 테이블스페이스 변경, 권한제외
# Import : 외부 DB에서 동일한 유저명의 모든 객체를 가져오기. 권한, 트리거 제외(DB Link)

 

 




  DROP TABLE hr.emp CASCADE CONSTRAINT PURGE;

CREATE TABLESPACE insa_tbs DATAFILE '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' SIZE 10M;


CREATE TABLE hr.emp TABLESPACE insa_tbs AS SELECT * FROM hr.employees;


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS       CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- ------------ ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                  1207350
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                  1207350
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                  1207350
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                  1207350
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                  1207350
         6 /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf      INSA_TBS   ONLINE                  1212873


SELECT e.segment_name,f.tablespace_name, f.file_name
FROM dba_extents e, dba_data_files f WHERE f.file_id = e.file_id
AND e.owner = 'HR' AND e.segment_name = 'EMP';
SEGMENT_NAME           TABLESPACE_NAME FILE_NAME
---------------------- --------------- --------------------------------------------------
EMP                    INSA_TBS        /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf

# Export : Tablespace Level
  - 테이블스페이스 내 세그먼트를 전부 내보내기

/home/oracle
[oracle@oracle ~]$ exp system/oracle file=insa_tbs.dmp tablespaces=insa_tbs
...
About to export selected tablespaces ...
For tablespace INSA_TBS ...
. exporting cluster definitions
. exporting table definitions
. . exporting table                            EMP        107 rows exported
. exporting referential integrity constraints
. exporting triggers
Export terminated successfully without warnings.


[oracle@oracle ~]$ ls
arch1  backup  database  hr_emp.dmp  hr_owner.dmp  insa_emp.dmp  insa_tbs.dmp  
michael_owner.dmp  new_control.sql  p13390677_112040_LINUX_1of7.zip  p13390677_112040_LINUX_2of7.zip

# Import : Tablespace Level
  DROP TABLESPACE insa_tbs INCLUDING CONTENTS AND DATAFILES;

SELECT e.segment_name,f.tablespace_name, f.file_name
FROM dba_extents e, dba_data_files f WHERE f.file_id = e.file_id
AND e.owner = 'HR' AND e.segment_name = 'EMP';

no rows selected


> Export -> Import 시 세그먼트만 있기 때문에 테이블스페이스는 직접 생성해야한다.

CREATE TABLESPACE insa_tbs DATAFILE '/u01/app/oracle/oradata/ora11g/insa_tbs01.dbf' SIZE 10M;


SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS          CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- --------------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                     1207350
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                     1207350
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                     1207350
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                     1207350
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                     1207350
         6 /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf      INSA_TBS   ONLINE                     1213598


# Import : 해당 테이블스페이스의 세그먼트 모두 가져오기

[oracle@oracle ~]$ imp system/oracle file=insa_tbs.dmp tablespaces=insa_tbs full=y
...
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 SYSTEM's objects into SYSTEM
. importing HR's objects into HR
. . importing table                          "EMP"        107 rows imported
Import terminated successfully without warnings.


SELECT e.segment_name,f.tablespace_name, f.file_name
FROM dba_extents e, dba_data_files f WHERE f.file_id = e.file_id
AND e.owner = 'HR' AND e.segment_name = 'EMP';
SEGMENT_NAME           TABLESPACE_NAME FILE_NAME
---------------------- --------------- --------------------------------------------------
EMP                    INSA_TBS        /u01/app/oracle/oradata/ora11g/insa_tbs01.dbf



DROP TABLESPACE insa_tbs INCLUDING CONTENTS AND DATAFILES;






# 논리적 디렉터리 생성
  [oracle@oracle ~]$ mkdir /home/oracle/data_pump

[oracle@oracle ~]$ ls
arch1  backup  database  data_pump  hr_emp.dmp  hr_owner.dmp  insa_emp.dmp  insa_tbs.dmp  
michael_owner.dmp  new_control.sql  p13390677_112040_LINUX_1of7.zip  p13390677_112040_LINUX_2of7.zip


# 논리적 디렉터리 생성
CREATE DIRECTORY pump_dir AS '/home/oracle/data_pump';


SELECT * FROM dba_directories WHERE directory_name = 'PUMP_DIR';
OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ ----------------------------------------
SYS                            PUMP_DIR                       /home/oracle/data_pump

# 논리적 디렉터리를 읽고 쓰는 권한 부여 : 객체권한
  GRANT READ, WRITE ON DIRECTORY pump_dir TO hr;


SELECT GRANTEE,OWNER,TABLE_NAME,GRANTOR,PRIVILEGE 
FROM dba_tab_privs WHERE grantee = 'HR';
GRANTEE    OWNER      TABLE_NAME                     GRANTOR    PRIVILEGE
---------- ---------- ------------------------------ ---------- ----------
HR         SYS        DBMS_STATS                     SYS        EXECUTE
HR         SYS        PUMP_DIR                       SYS        WRITE
HR         SYS        PUMP_DIR                       SYS        READ

# 논리적 디렉터리 삭제
  DROP DIRECTORY pump_dir;

 




■ Data Pump
- 고속 데이터/메타 데이터 이동(export,import)을 위한 유틸리티
- dbms_datapump
- expdp, impdp

# Export : 특정 테이블 추출
  expdp [user/password] [directory=저장위치] [dumpfile=파일명.dmp] [tables=소유자.테이블명, 소유자.테이블명, ...]


[oracle@oracle ~]$ expdp system/oracle directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.employees,hr.departments,hr.job_history
...
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.employees,hr.departments,hr.job_history
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."DEPARTMENTS"                          7.007 KB      27 rows
. . exported "HR"."EMPLOYEES"                            16.80 KB     107 rows
. . exported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /home/oracle/data_pump/hr_emp_dept_job.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Tue Jan 23 10:19:50 2024 elapsed 0 00:00:07


[oracle@oracle ~]$ ls /home/oracle/data_pump
export.log  hr_emp_dept_job.dmp

- export.log : 화면에 출력된 진행 Log



SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
        10

DROP TABLE hr.job_history PURGE;

# Import : 특정 테이블만 가져오기
  impdp [user/password] [directory=파일위치] [dumpfile=파일명.dmp] [tables=소유자.테이블명 , 소유자.테이블명, ...]


[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history
...
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at Tue Jan 23 10:25:47 2024 elapsed 0 00:00:03


SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
        10



TRUNCATE TABLE hr.job_history;

SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
         0

# import : 테이블 있는 상태에서 데이터만 가져오기
  impdp [user/password] [directory=파일위치] [dumpfile=파일명.dmp] [tables=소유자.테이블명] [content=data_only]


[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history content=data_only

...
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history content=data_only
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at Tue Jan 23 10:28:02 2024 elapsed 0 00:00:02


SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
        10



DROP TABLE hr.job_history PURGE;

# import : 테이블구조만 가져오기
  impdp [user/password] [directory=파일위치] [dumpfile=파일명.dmp] [tables=소유자.테이블명] [content=metadata_only]


[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history content=metadata_only
...
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history content=metadata_only
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at Tue Jan 23 10:47:54 2024 elapsed 0 00:00:01


SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
         0



# 데이터만 가져오기
[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_emp_dept_job.dmp tables=hr.job_history content=data_only

SELECT COUNT(*) FROM hr.job_history;
  COUNT(*)
----------
        10



<< HR SESSION >>

SQL> conn hr/hr

SQL> SELECT * FROM tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
...
12 rows selected.


PURGE RECYCLEBIN;



<< SYS SESSION >>

SQL> conn / as sysdba

# Export : Schema Level, 특정 개체 제외
  expdp [user/password] [directory=저장위치] [dumpfile=파일명.dmp] [schemas=소유자]
[exclude=table:"='제외테이블'"]

- schema : 소유자의 모든 객체를 포함


[oracle@oracle ~]$ expdp system/oracle directory=pump_dir dumpfile=hr_schema.dmp schemas=hr exclude=table:\"\=\'TEST_20240122\'\"
...
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** directory=pump_dir dumpfile=hr_schema.dmp schemas=hr exclude=table:"='TEST_20240122'"
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 576 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."COPY_EMP"                             16.80 KB     107 rows
. . exported "HR"."COUNTRIES"                            6.367 KB      25 rows
. . exported "HR"."DEPARTMENTS"                          7.007 KB      27 rows
. . exported "HR"."EMPLOYEES"                            16.80 KB     107 rows
. . exported "HR"."INSA_EMP"                             16.80 KB     107 rows
. . exported "HR"."JOBS"                                 6.992 KB      19 rows
. . exported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
. . exported "HR"."LOCATIONS"                            8.273 KB      23 rows
. . exported "HR"."REGIONS"                              5.476 KB       4 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/data_pump/hr_schema.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Jan 23 11:03:01 2024 elapsed 0 00:00:15

# Export : Schema Level, 특정 개체 다중 제외
  expdp [user/password] [directory=저장위치] [dumpfile=파일명.dmp] [schemas=소유자]
[exclude=table:"in ('테이블명', '테이블명', '...')"]


[oracle@oracle ~]$ expdp system/oracle directory=pump_dir dumpfile=hr_e_j_schema.dmp schemas=hr exclude=table:\"\in \(\'TEST_20240122\',\'JOBS\',\'REGIONS\'\)\"
...
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** directory=pump_dir dumpfile=hr_e_j_schema.dmp schemas=hr exclude=table:"in ('TEST_20240122','JOBS','REGIONS')"
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 448 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."COPY_EMP"                             16.80 KB     107 rows
. . exported "HR"."COUNTRIES"                            6.367 KB      25 rows
. . exported "HR"."DEPARTMENTS"                          7.007 KB      27 rows
. . exported "HR"."EMPLOYEES"                            16.80 KB     107 rows
. . exported "HR"."INSA_EMP"                             16.80 KB     107 rows
. . exported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
. . exported "HR"."LOCATIONS"                            8.273 KB      23 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/data_pump/hr_e_j_schema.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Jan 23 11:08:09 2024 elapsed 0 00:00:11

# export : schema에서 테이블만 가져오기
  expdp [user/password] [directory=파일위치] [dumpfile=파일명.dmp] [schemas=소유자] [include=table]

- include = 가져올 객체


[oracle@oracle ~]$ expdp system/oracle schemas=hr directory=pump_dir dumpfile=hr_table.dmp include=table
...
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** schemas=hr directory=pump_dir dumpfile=hr_table.dmp include=table
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 640 KB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."COPY_EMP"                             16.80 KB     107 rows
. . exported "HR"."COUNTRIES"                            6.367 KB      25 rows
. . exported "HR"."DEPARTMENTS"                          7.007 KB      27 rows
. . exported "HR"."EMPLOYEES"                            16.80 KB     107 rows
. . exported "HR"."INSA_EMP"                             16.80 KB     107 rows
. . exported "HR"."JOBS"                                 6.992 KB      19 rows
. . exported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
. . exported "HR"."LOCATIONS"                            8.273 KB      23 rows
. . exported "HR"."REGIONS"                              5.476 KB       4 rows
. . exported "HR"."TEST_20240122"                        5.414 KB       1 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/data_pump/hr_table.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Jan 23 11:13:34 2024 elapsed 0 00:00:10







CREATE USER henry IDENTIFIED BY oracle DEFAULT TABLESPACE USERS QUOTA 10M ON USERS;

GRANT CREATE SESSION TO henry;


SELECT table_name, tablespace_name FROM dba_tables where owner = 'HR';
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ---------------
COPY_EMP                       USERS
TEST_20240122                  USERS
INSA_EMP                       USERS
LOCATIONS                      EXAMPLE
DEPARTMENTS                    EXAMPLE
JOBS                           EXAMPLE
EMPLOYEES                      EXAMPLE
JOB_HISTORY                    EXAMPLE
COUNTRIES
REGIONS                        EXAMPLE


>> 헨리는 EXAMPLE 테이블스페이스 권한이없다


# Export : 소유자 및 테이블스페이스 변경(remap)
[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_table.dmp remap_schema='hr':'henry' remap_tablespace='EXAMPLE':'USERS'
...
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** directory=pump_dir dumpfile=hr_table.dmp remap_schema=hr:henry remap_tablespace=EXAMPLE:USERS
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "HENRY"."COPY_EMP"                          16.80 KB     107 rows
. . imported "HENRY"."COUNTRIES"                         6.367 KB      25 rows
. . imported "HENRY"."DEPARTMENTS"                       7.007 KB      27 rows
. . imported "HENRY"."EMPLOYEES"                         16.80 KB     107 rows
. . imported "HENRY"."INSA_EMP"                          16.80 KB     107 rows
. . imported "HENRY"."JOBS"                              6.992 KB      19 rows
. . imported "HENRY"."JOB_HISTORY"                       7.054 KB      10 rows
. . imported "HENRY"."LOCATIONS"                         8.273 KB      23 rows
. . imported "HENRY"."REGIONS"                           5.476 KB       4 rows
. . imported "HENRY"."TEST_20240122"                     5.414 KB       1 rows
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
ORA-39082: Object type TRIGGER:"HENRY"."UPDATE_JOB_HISTORY" created with compilation warnings
ORA-39082: Object type TRIGGER:"HENRY"."UPDATE_JOB_HISTORY" created with compilation warnings
ORA-39082: Object type TRIGGER:"HENRY"."SECURE_EMPLOYEES" created with compilation warnings
ORA-39082: Object type TRIGGER:"HENRY"."SECURE_EMPLOYEES" created with compilation warnings
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 4 error(s) at Tue Jan 23 11:24:13 2024 elapsed 0 00:00:03





SQL> conn henry/oracle
Connected.

SELECT table_name, tablespace_name FROM user_tables;
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ---------------
EMPLOYEES                      USERS
JOBS                           USERS
DEPARTMENTS                    USERS
LOCATIONS                      USERS
REGIONS                        USERS
JOB_HISTORY                    USERS
COPY_EMP                       USERS
TEST_20240122                  USERS
INSA_EMP                       USERS
COUNTRIES


SELECT * FROM user_tab_privs;
GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
OE                             HENRY                          COUNTRIES                      HENRY                          REFERENCES                               NO  NO
OE                             HENRY                          COUNTRIES                      HENRY                          SELECT                                   NO  NO
OE                             HENRY                          DEPARTMENTS                    HENRY                          SELECT                                   NO  NO
OE                             HENRY                          EMPLOYEES                      HENRY                          SELECT                                   NO  NO
OE                             HENRY                          EMPLOYEES                      HENRY                          REFERENCES                               NO  NO
OE                             HENRY                          JOBS                           HENRY                          SELECT                                   NO  NO
OE                             HENRY                          JOB_HISTORY                    HENRY                          SELECT                                   NO  NO
OE                             HENRY                          LOCATIONS                      HENRY                          SELECT                                   NO  NO
OE                             HENRY                          LOCATIONS                      HENRY                          REFERENCES                               NO  NO


SELECT COUNT(*) FROM hr.employees WHERE department_id = 50 AND job_id = 'ST_MAN';
  COUNT(*)
----------
         5





# EXPORT : 특정 테이블의 데이터 조건부 추출(query)
[oracle@oracle ~]$ expdp system/oracle directory=pump_dir dumpfile=hr_50_st_man.dmp tables=hr.employees query=hr.employees:\"where department_id \= 50 and job_id \= \'ST_MAN\'\"
...
Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/******** directory=pump_dir dumpfile=hr_50_st_man.dmp tables=hr.employees query=hr.employees:"where department_id = 50 and job_id = 'ST_MAN'"
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/COMMENT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/TRIGGER
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."EMPLOYEES"                            9.585 KB       5 rows
Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:
  /home/oracle/data_pump/hr_50_st_man.dmp
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Tue Jan 23 11:58:34 2024 elapsed 0 00:00:04





CREATE TABLE hr.emp_50_stman AS SELECT * FROM hr.employees WHERE 1 = 2;

SELECT COUNT(*) FROM hr.emp_50_stman;
  COUNT(*)
----------
         0


# Import : 다른 테이블로 데이터 가져오기(remap)
[oracle@oracle ~]$ impdp system/oracle directory=pump_dir dumpfile=hr_50_st_man.dmp remap_table=employees:emp_50_stman content=data_only


SELECT COUNT(*) FROM hr.emp_50_stman;
  COUNT(*)
----------
         5





### listener L01 - TNS 상태 체크

vi listener.ora 확인

[oracle@oracle ~]$ lsnrctl start L01

[oracle@oracle ~]$ lsnrctl status L01

윈도우 : tnsnames.ora 확인

# XE에서 ora11g DB의 system 계정으로 접속
C:/> sqlplus system/oracle@ora11g
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select name from v$database;
NAME
------------------
ORA11G

SQL> SELECT status, instance_name FROM v$instance;
STATUS                   INSTANCE_NAME
------------------------ --------------------------------
OPEN                     ora11g



### XE - system 계정 체크

C:\>sqlplus system/oracle
ORA-28000: the account is locked

SELECT username,account_status FROM dba_users WHERE username='SYSTEM';
USERNAME                                                     ACCOUNT_STATUS
------------------------------------------------------------ ----------------------------------------------------------------
SYSTEM                                                       LOCKED(TIMED)

ALTER USER system ACCOUNT UNLOCK;

SQL> SELECT username,account_status FROM dba_users WHERE username='SYSTEM';
USERNAME                                                     ACCOUNT_STATUS
------------------------------------------------------------ ----------------------------------------------------------------
SYSTEM                                                       OPEN

ALTER USER system IDENTIFIED BY oracle;





<< 터미널 XE DB >>

C:\> sqlplus / as sysdba

SQL> SELECT name FROM v$database;
NAME
-----------------------------------------------
XE

SQL> SELECT * FROM dba_db_links;
OWNER      DB_LINK         USERNAME   HOST                      CREATED
---------- --------------- ---------- ------------------------- --------
PUBLIC     DBMS_CLRDBLINK             ORACLR_CONNECTION_DATA    23/10/05
HR         ORA11G_HR       HR         ora11g                    24/01/05


# Public Database Link 생성
SQL> CREATE PUBLIC DATABASE LINK ora11g_link CONNECT TO system IDENTIFIED BY oracle USING 'ora11g';

USING 'ora11g'    : 원격접속하려는 서비스명
CONNECT TO system : 계정정보
PUBLIC            : 생성자 외 모든 유저가 사용 가능


SQL> SELECT * FROM dba_db_links;
OWNER      DB_LINK         USERNAME   HOST                      CREATED
---------- --------------- ---------- ------------------------- --------
PUBLIC     ORA11G_LINK     SYSTEM     ora11g                    24/01/23
PUBLIC     DBMS_CLRDBLINK             ORACLR_CONNECTION_DATA    23/10/05
HR         ORA11G_HR       HR         ora11g                    24/01/05


# Public Database Link 삭제
DROP PUBLIC DATABASE LINK ora11g_link;


DROP PUBLIC DATABASE LINK ora11g_hr;
>> hr 계정에서 삭제 완료


SQL> SELECT * FROM dba_directories;
OWNER      DIRECTORY_NAME            DIRECTORY_PATH
---------- ------------------------- --------------------------------------------------
SYS        ORACLECLRDIR              C:\oraclexe\app\oracle\product\11.2.0\server\bin\clr
SYS        DATA_PUMP_DIR             C:\oraclexe\app\oracle/admin/xe/dpdump/                    v
SYS        XMLDIR                    C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml
SYS        ORACLE_OCM_CONFIG_DIR     C:\ADE\aime_xe28\oracle/ccr/state









SQL> host   ->> OS로 나가기 = Linux에서 !









- XE에서 xe의 system 계정으로 진행
- chemas=hr network_link=ORA11G_LINK -> DB링크를 통한 ora11g db 의 hr schema


# Export : 원격DB에서 특정 소유자의 모든 객체 가져오기(DB Link)
C:\Users> expdp system/oracle directory=DATA_PUMP_DIR dumpfile=hr.dmp schemas=hr network_link=ora11g_link
...
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** directory=DATA_PUMP_DIR dumpfile=hr.dmp schemas=hr network_link=ORA11G_LINK
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 704 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "HR"."COPY_EMP"                             16.80 KB     107 rows
. . exported "HR"."COUNTRIES"                            6.273 KB      25 rows
. . exported "HR"."DEPARTMENTS"                          7.007 KB      27 rows
. . exported "HR"."EMPLOYEES"                            16.80 KB     107 rows
. . exported "HR"."EMP_50_STMAN"                         9.593 KB       5 rows
. . exported "HR"."INSA_EMP"                             16.80 KB     107 rows
. . exported "HR"."JOBS"                                 6.992 KB      19 rows
. . exported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
. . exported "HR"."LOCATIONS"                            8.273 KB      23 rows
. . exported "HR"."REGIONS"                              5.476 KB       4 rows
. . exported "HR"."TEST_20240122"                        5.414 KB       1 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  C:\ORACLEXE\APP\ORACLE\ADMIN\XE\DPDUMP\HR.DMP
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 15:13:26



C:\oraclexe\app\oracle/admin/xe/dpdump/
진행과정 출력 log 확인 가능



SQL> SELECT status, instance_name FROM v$instance;

STATUS                   INSTANCE_NAME
------------------------ --------------------------------
OPEN                     xe

SQL> conn hr/hr
Connected.

SQL> SELECT * FROM tab;

SQL> SELECT table_name, tablespace_name FROM user_tables;
36 rows selected.

> 테이블 전부 users 테이블스페이스


DROP TABLE hr.job_history PURGE;


SELECT COUNT(*) FROM hr.job_history;
ORA-00942: table or view does not exist


> host


- dump 파일 > example 테이블스페이스로 되어있다

# Import : 테이블스페이스 변경, 권한제외
C:\Users> impdp system/oracle directory=data_pump_dir dumpfile=hr.dmp tables=hr.job_history remap_tablespace=example:users exclude=grant
...
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** directory=data_pump_dir dumpfile=hr.dmp tables=hr.job_history remap_tablespace=example:users exclude=grant
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."JOB_HISTORY"                          7.054 KB      10 rows
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" successfully completed at 15:15:46



SQL> SELECT COUNT(*) FROM hr.job_history;

  COUNT(*)
----------
        10


conn / as sysdba


SELECT name FROM v$database;
NAME
------------------
XE


SQL> SELECT tablespace_name, file_name FROM dba_data_files;
TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
USERS                C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
SYSAUX               C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
UNDOTBS1             C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
SYSTEM               C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF



CREATE USER james IDENTIFIED BY oracle DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;

GRANT CREATE SESSION TO james;


# import : 모든 객체의 소유자 및 테이블스페이스 변경, 권한제외
C:\Users> impdp system/oracle directory=data_pump_dir dumpfile=hr.dmp remap_schema=hr:james remap_tablespace=example:users exclude=grant
...
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** directory=data_pump_dir dumpfile=hr.dmp remap_schema=hr:james remap_tablespace=example:users exclude=grant
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"JAMES" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "JAMES"."COPY_EMP"                          16.80 KB     107 rows
. . imported "JAMES"."COUNTRIES"                         6.273 KB      25 rows
. . imported "JAMES"."DEPARTMENTS"                       7.007 KB      27 rows
. . imported "JAMES"."EMPLOYEES"                         16.80 KB     107 rows
. . imported "JAMES"."EMP_50_STMAN"                      9.593 KB       5 rows
. . imported "JAMES"."INSA_EMP"                          16.80 KB     107 rows
. . imported "JAMES"."JOBS"                              6.992 KB      19 rows
. . imported "JAMES"."JOB_HISTORY"                       7.054 KB      10 rows
. . imported "JAMES"."LOCATIONS"                         8.273 KB      23 rows
. . imported "JAMES"."REGIONS"                           5.476 KB       4 rows
. . imported "JAMES"."TEST_20240122"                     5.414 KB       1 rows
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at 15:18:01



conn james/oracle


SELECT * FROM tab;
TNAME                                                        TABTYPE         CLUSTERID
------------------------------------------------------------ -------------- ----------
COPY_EMP                                                     TABLE
COUNTRIES                                                    TABLE
DEPARTMENTS                                                  TABLE
EMPLOYEES                                                    TABLE
EMP_50_STMAN                                                 TABLE
EMP_DETAILS_VIEW                                             VIEW
INSA_EMP                                                     TABLE
JOBS                                                         TABLE
JOB_HISTORY                                                  TABLE
LOCATIONS                                                    TABLE
REGIONS                                                      TABLE
TEST_20240122                                                TABLE





# ora11g 데이터베이스 있는 henry 유저가 소유한 테이블을 XE db의 henry 유저로 import하기

<< ora11g >>

SELECT table_name, tablespace_name FROM dba_tabls WHERE ornwer = 'HR';



<< XE sys >>


CREATE USER henry IDENTIFIED BY oracle DEFAULT TABLESPACE USERS unlimited on users;

GRANT CREATE SESSION TO henry;

> host


# Import : 외부 DB에서 동일한 유저명의 모든 객체를 가져오기. 권한, 트리거 제외(DB Link)
import system/oracle network_link=ora11g_link schemas=henry exclude=grant,trigger


conn henry/oracle


SELECT * FROM tab;






_USER : 접속한 유저
_CONNECT_IDENTIFIER : 접속한 db 정보

# session
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "




as is -> to be
(현재) -> (신규)
legacy db -> 


DROP USER hrm CASCADE;

==============================================================================================================

1. tablespace 생성한 후 확인 하세요.
  tablespace 이름  : hrm_tbs
  datafile 위치 및 이름  : /u01/app/oracle/oradata/ora11g/hrm_tbs01.dbf
  datafile 사이즈  : 10m
  datafile 자동 확장 활성화
  extent 관리 : local uniform size 1m
  segment space management: auto

CREATE TABLESPACE hrm_tbs
DATAFILE '/u01/app/oracle/oradata/ora11g/hrm_tbs01.dbf'
SIZE 10M AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;

SELECT a.file#, a.name file_name, b.name tbs_name, a.status, a.checkpoint_change#
FROM v$datafile a, v$tablespace b
WHERE a.ts# = b.ts#;
     FILE# FILE_NAME                                          TBS_NAME   STATUS          CHECKPOINT_CHANGE#
---------- -------------------------------------------------- ---------- --------------- ------------------
         1 /u01/app/oracle/oradata/ora11g/system01.dbf        SYSTEM     SYSTEM                     1237662
         2 /u01/app/oracle/oradata/ora11g/sysaux01.dbf        SYSAUX     ONLINE                     1237662
         3 /u01/app/oracle/oradata/ora11g/undotbs01.dbf       UNDOTBS    ONLINE                     1237662
         4 /u01/app/oracle/oradata/ora11g/users01.dbf         USERS      ONLINE                     1237662
         5 /u01/app/oracle/oradata/ora11g/example01.dbf       EXAMPLE    ONLINE                     1237662
         6 /u01/app/oracle/oradata/ora11g/hrm_tbs01.dbf       HRM_TBS    ONLINE                     2137204

SELECT * FROM dba_tablespaces WHERE = 'TABLESPACE_NAME';



2. user 생성하세요.
  user 이름 : hrm
  user 비밀번호 : oracle
  default tablespace : hrm_tbs
  temporary tablespace : temp
  default tablespace quota : unlimited

CREATE USER hrm IDENTIFIED BY oracle
DEFAULT TABLESPACE hrm_tbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON hrm_tbs;

SELECT username,account_status,default_tablespace,temporary_tablespace,PROFILE
FROM dba_users WHERE username = 'HRM';
USERNAME   ACCOUNT_STATUS                   DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE           PROFILE
---------- -------------------------------- ------------------------------ ------------------------------ ------------------------------
HRM        OPEN                             HRM_TBS                        TEMP                           DEFAULT



3. hrm 유저에게 시스템 권한 부여한 후 확인 하세요.

   시스템 권한 : create session, create table, create view, create procedure

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO hrm;

SELECT * FROM dba_sys_privs WHERE grantee = 'HRM';
GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
HRM                            CREATE TABLE                             NO
HRM                            CREATE PROCEDURE                         NO
HRM                            CREATE SESSION                           NO
HRM                            CREATE VIEW                              NO



4. /home/oracle/hr_pump 물리적인 디렉토리를 생성 한 후 dump file이 생성될 수 있는 물지적인 home/oracle/hr_pump 
위치에 따른 논리적인 디렉토리는 hr_dir 이름으로 생성한 후 확인 하세요.

[oracle@oracle ~]$ mkdir /home/oracle/hr_pump

create directory hr_dir as '/home/oracle/hr_pump';

SELECT * FROM dba_directories WHERE directory_name = 'HR_DIR';
OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------
SYS                            HR_DIR                         /home/oracle/hr_pump



5. hr_dir 논리적인 디렉토리에 대한 read, write 권한은 hr에게 부여 한 후 확인해주세요.

GRANT READ,WRITE ON DIRECTORY hr_dir TO hr;

SELECT grantee,owner,table_name,grantor,privilege 
FROM dba_tab_privs WHERE grantee = 'HR';
GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------------------------------------
HR                             SYS                            DBMS_STATS                     SYS                            EXECUTE
HR                             SYS                            PUMP_DIR                       SYS                            WRITE
HR                             SYS                            PUMP_DIR                       SYS                            READ
HR                             SYS                            HR_DIR                         SYS                            WRITE
HR                             SYS                            HR_DIR                         SYS                            READ



6. data pump를 이용해서 hr유저가 소유한 모든 object를  hr_dir 디렉토리에 hr_object.dump 이름으로 생성해 주세요.

[oracle@oracle ~]$ expdp system/oracle directory=hr_dir dumpfile=hr_object.dump schemas=hr

[oracle@oracle ~]$ cd /home/oracle/hr_pump

[oracle@oracle hr_pump]$ ls
export.log  hr_object.demp



7. hr_object.dump에 있는 employees 테이블에 대해서 hrm유저에게 import에 해주세요
   단  trigger, grant, constraint, ref_constraint, index는 제외 시켜 주세요.

SELECT owner,table_name,tablespace_name FROM dba_tables WHERE owner = 'HR' AND table_name = 'EMPLOYEES';
OWNER                          TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------ ---------------
HR                             EMPLOYEES                      EXAMPLE

SELECT username,default_tablespace FROM dba_users WHERE username IN ('HRM','HR');
USERNAME   DEFAULT_TABLESPACE
---------- ------------------------------
HR         USERS
HRM        HRM_TBS

[oracle@oracle ~]$
impdp system/oracle directory=hr_dir dumpfile=hr_object.dump remap_schema=hr:hrm
remap_tablespace=example:hrm_tbs tables=hr.employees exclude=trigger,grant,constraint,index

SQL> conn hrm/oracle

SQL> SELECT COUNT(*) FROM hrm.employees;
  COUNT(*)
----------
       107

SELECT * FROM dba_constraints WHERE owner = 'HRM' AND table_name = 'EMPLOYEES';

> not null 제약조건은 포함되어있다? -> 열단위라서 



8. hr_object.dump에 있는 departments, locations 테이블에 대해서 hrm유저에게 import에 해주세요
단  trigger, grant, constraint, ref_constraint, index는 제외 시켜 주세요.

SELECT owner,table_name,tablespace_name FROM dba_tables 
WHERE owner = 'HR' AND table_name IN ('DEPARTMENTS','LOCATIONS');
OWNER                          TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------ ---------------
HR                             LOCATIONS                      EXAMPLE
HR                             DEPARTMENTS                    EXAMPLE

SELECT username,default_tablespace FROM dba_users WHERE username IN ('HRM','HR');
USERNAME   DEFAULT_TABLESPACE
---------- ------------------------------
HR         USERS
HRM        HRM_TBS

[oracle@oracle ~]$
impdp system/oracle directory=hr_dir dumpfile=hr_object.dump remap_schema='hr':'hrm' 
remap_tablespace='example':'hrm_tbs' tables=hr.departments,hr.locations exclude=trigger,grant,constraint,ref_constraint,index

오브젝트 확인하기
SELECT * FROM dba_tabs;



9. hrm.employees employee_id 컬럼에 primary key 생성하세요. 제약조건 이름은 hrm_emp_id_pk로 생성하세요.

ALTER TABLE hrm.employees ADD CONSTRAINT hrm_emp_id_pk PRIMARY KEY(employee_id);



10. hrm.departments department_id 컬럼에 primary key 생성하세요. 제약조건 이름은 hrm_dept_id_pk로 생성하세요.

ALTER TABLE hrm.departments ADD CONSTRAINT hrm_dept_id_pk PRIMARY KEY(department_id);



11. hrm.employees department_id에 foreign key를 생성하세요. references는 departments department_id를 참조하세요.
제약조건 이름은 emp_dept_id_fk로 생성하세요.

ALTER TABLE hrm.employees ADD CONSTRAINT emp_dept_id_fk FOREIGN KEY(department_id)
REFERENCES hrm.departments(department_id);


SELECT constraint_name,constraint_type,search_condition,r_constraint_name,status,validated,index_name
FROM dba_constraints WHERE owner = 'HRM';

SELECT * FROM dba_constraints WHERE owner = 'HRM';