Linux에서 Oracle 데이터베이스 백업 및 복구 (emp 및 imp 명령)

                                      Linux에서 Oracle 데이터베이스 백업 및 복구 (emp 및 imp 명령)

MySQL에 비해 Oracle의 백업 및 복원 명령은 더 강력하고 백업 명령은 emp이며 복원 명령은 imp입니다. 사용되는 논리 파일에는 일반적으로 데이터베이스 논리 백업, 데이터베이스 마이그레이션 및 기타 작업에 자주 사용되는 dmp, oracle 논리 백업 파일이 접미어로 붙습니다 .

 

exp 내보내기 도구는 데이터베이스의 데이터 백업을 바이너리 시스템 파일로 압축하며 다른 OS간에 마이그레이션 할 수 있습니다.

그것은 세 가지 모드가 있습니다 :
       사용자 모드 :. 수출하여 사용자의 객체와 객체의 데이터;
       . B 표 모드 : 수출 모든 테이블 또는 사용자 지정 테이블;
       . C를 전체 데이터베이스 : 수출 데이터베이스의 모든 개체를.

임프 가져 오기 도구에는 다음 세 가지 모드가 있습니다 :
       a. 사용자 모드 : 사용자의 모든 개체 및 개체의 데이터
       가져 오기 b. 테이블 모드 : 사용자의 모든 테이블 또는 지정된 테이블
       가져 오기 c. 전체 데이터베이스 : 모든 개체 가져 오기 데이터베이스.

imp가 수행하는 단계 : 
   (1) 테이블 생성 (2) 데이터 삽입 (3) 인덱스 생성 (4) 트리거 생성, 제약 조건-테이블 생성, 데이터 삽입, 인덱스 생성, 새 트리거 생성 및 다양한 제약 조건.

IMP_FULL_DATABASE 및 DBA ​​권한이있는 사용자 만 전체 데이터베이스 가져 오기를 수행 할 수 있습니다. 

임포트 도구 사용시 발생할 수있는 문제 :

(1) 일반적으로 데이터베이스 개체가 이미 존재하며 
, 대상 데이터 아래의 테이블, 시퀀스, 함수 / 프로 시저, 트리거 등은 데이터를 가져 오기 전에 완전히 삭제해야합니다.   
데이터베이스 개체가 이미 존재하는 경우, 기본값을 누르면 imp 매개 변수가
매개 변수가 무시 = y 인 경우 가져 오기가 실패  하고, 데이터 파일의 내용에 도입
됩니다. 테이블에 고유 한 키 제약 조건이있는 경우 exp가되고, 다음과 같은  경우 원하지 않는 조건이
제약 조건에 도입되지 않습니다.  테이블이 고유 키가 아니므로 중복 레코드가 발생합니다. 

(2) 데이터베이스 개체에 기본 및 외래 키 제약 조건을 
      충족하지 않는 기본 및 외래 키 제약 조건이있는 경우 데이터를 가져 오지 못합니다.
      해결 방법 : 먼저
기본 테이블을 가져옵니다 .   , 그런 다음 종속 테이블을 가져옵니다.  대상 가져 오기 개체의 기본 및 외래 키 제약 조건을 비활성화하고, 데이터를 가져온 후 활성화합니다. 
(3) 권한
충분하지 않습니다.  사용자 A의 데이터를 사용자 B에게 가져 오려면 사용자 A에 imp_full_database 권한이 있어야합니다. 

(4) 큰 테이블 (80M 이상)을 가져올 때 저장 할당에 실패합니다. 
      기본 EXP, compress = Y, 즉 하나의 데이터 블록에있는 모든 데이터를 압축합니다.
      가져올 때  연속적인 큰 데이터 블록이없는 경우, 가져 오기가 실패합니다.
      80M 이상의 큰 테이블을 내보낼 때  compress = N이면 이런 종류의 오류가 발생하지 않습니다. 

(5) imp와 exp에서 사용하는 문자 집합이 다릅니다. 
      문자 집합이 다른 경우 가져 오기가 실패합니다. NT 레지스트리에서 유닉스 환경 변수 또는 NLS_LANG 관련 정보를 변경할 수 있습니다. 
      가져 오기가 완료된 후 다시 변경하십시오. 

select * from v $ nls_parameters where parameter = 'NLS_CHARACTERSET';-현재 시스템에서 사용하는 문자 집합 쿼리

select * from v $ nls_parameters;-문자 집합과 관련된 모든 매개 변수 쿼리

시스템의 문자 집합을 수정합니다.

Oracle 8 이전에는 데이터 사전 테이블 props $를 직접 수정하여 데이터베이스의 문자 집합을 변경할 수 있습니다. 그러나 oracle8 이후에는 데이터베이스 문자 집합의 정보를 기록하는 시스템 테이블이 3 개 이상 있으며, props $ 테이블 변경 만 완료되지 않으며 심각한 결과를 초래할 수 있습니다. 올바른 수정 방법은 다음과 같습니다.

이때 데이터베이스 서버가 시작되면 먼저 SHUTDOWN IMMEDIATE 명령을 실행하여 데이터베이스 서버를 종료 한 후 다음 명령을 실행합니다.
  SQL> STARTUP MOUNT;
  SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
  SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
  SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 0;
  SQL> ALTER DATABASE OPEN;
  SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; // supersubset 감지 건너 뛰기 AL32UTF8;
  SQL> ALTER DATABASE 국가 문자 설정 내부 ZHS16GBK; AL32UTF8;

위의 프로세스는 데이터베이스를 닫고 데이터베이스를 마운트 상태로 시작한 다음 데이터베이스 유지 관리 모드로 들어가는 것입니다. 이때 시스템 및 sys 사용자 만 데이터베이스에 로그인 할 수 있습니다. DBMS 스케줄러 및 DBMS 스케줄 작업을 닫고, 자동 작업 시작을 닫고, 문자 슈퍼 하위 집합 검사를 건너 뛰고, 시스템 문자 집합을 설정하고, 데이터베이스를 닫고, 데이터베이스를 다시 시작합니다.



(6) Imp 및 exp 버전은 상위 버전과 호환되지 않습니다. 
Imp는 하위 버전의 exp에서 생성 된 파일을 성공적으로 가져올 수 있지만 상위 버전의 exp에서 생성 된 파일은 가져올 수 없습니다. 
상황에 따라 사용할 수 있습니다.

 

 

exp와 imp와 데이터 펌프 expdp와 impdp의 차이점 :

1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。exp在客户端使用,要受到网速的影响,因此会比较慢。
2、expdp和impdp是服务端的工具程序,他们只能在Oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
5,数据泵expdp和impdp导出可以使用parallel属性指定并行任务导出,parallel=2就是并行2个任务导出。当然,这个并不是越多越好,需要考虑服务器的性能和cpu的个数等等因素。还可以通过导出多个文件的方式提高性能,即使用dumpfile=expdp.dp1,expdp.dp2这种方式提高性能。需要用户根据实际情况设置
6,exp导出时读取的是sql,通过加载sql查询结果到缓存,然后在写进目标文件,而expdp是直接读取的数据块,直接从数据块写进目标文件。

 

간단한 예제로 시작하여 zsk 사용자의 emp 테이블을 내보내고 emp 테이블을 가져옵니다.

a, 사용자 zsk의 emp 테이블 내보내기

zsk 사용자는 새로운 사용자이고 emp 테이블은 자체적으로 생성된다고 설명하고 테이블 생성 후 emp 테이블을 파일로 내 보낸 다음 emp 테이블을 삭제하고 가져 오기 파일에서 emp 테이블을 복원합니다.

b, zsk 사용자를 만들고 적절한 권한을 부여합니다.

sqlplus를 입력하고 sys 사용자를 사용하여 데이터베이스에 로그인하고 새 zsk 사용자를 만들고 테이블을 만들고 데이터를 삽입하고 테이블을 삭제할 수있는 권한을 부여합니다.

zsk로 식별 된 사용자 zsk 생성, zsk에 세션 생성 부여, zsk에 무제한 테이블 스페이스 부여, 그랜트 zsk에 테이블 생성 허용,-연결 데이터베이스 권한, 테이블 스페이스 읽기 권한, 새 테이블 권한, 이러한 권한 만 충분하고 zsk 사용자 암호는 zsk입니다.

c. 샘플 테이블 emp를 생성합니다. 테이블 생성을위한 SQL 문은 다음과 같이 14 개의 레코드를 삽입합니다.

create table EMP
(
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
)
;
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (1, 'dog', 'code', 7369, to_date('05-06-2018', 'dd-mm-yyyy'), 5000, 5000, 10);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 
30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 
20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 
30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 
30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 
20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 
10);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);
insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);
commit;

d, emp 테이블 내보내기

Oracle 사용자 아래에서 exp 명령을 입력하여 대화식으로 들어갑니다.

[oracle@centos11 ~]$ exp

Export: Release 11.2.0.1.0 - Production on Tue Jan 19 20:13:43 2021

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


Username: zsk
Password: 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Enter array fetch buffer size: 4096 > 

Export file: expdat.dmp > 

(2)U(sers), or (3)T(ables): (2)U > T

Export table data (yes/no): yes > 

Compress extents (yes/no): yes > 

Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)

About to export specified tables via Conventional Path ...
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > emp

. . exporting table                            EMP         14 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 

Export terminated successfully without warnings.

저장된 파일은 Oracle 사용자 디렉터리 아래의 oracle 디렉터리에 있습니다. 위가 기본값입니다. RETURN toquit 행 이후에 백업 할 테이블 이름을 입력 한 다음 Enter 키를 끝까지 누릅니다. 위의 내보내기는 기본적으로 압축을 사용하고 테이블 데이터를 내보내는 것이며 입력 T는 단일 테이블을 내보내는 것을 의미합니다. 두 번째 테이블을 내보내고 싶을 때 종료 할 두 번째 RETURN을 입력하고 내 보내지 않으려면 Enter를 누르십시오.

e, emp 데이터베이스를 가져옵니다.

먼저 sqlplus는 zsk에 로그인하여 emp 테이블을 삭제합니다. 드롭 테이블 emp;

그런 다음 다음 명령을 실행합니다. imp  zsk / zsk @ test file = / home / oracle / expdat.dmp

데이터베이스 이름은 test이므로 @ 뒤에 test를 작성하고 다음을 정상적으로 입력합니다.

[oracle@centos11 ~]$ imp zsk/zsk@test file=/home/oracle/emp.dmp

Import: Release 11.2.0.1.0 - Production on Tue Jan 19 20:25:06 2021

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 - 64bit 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 ZSK's objects into ZSK
. importing ZSK's objects into ZSK
. . importing table                         "EMPS"         14 rows imported
Import terminated successfully without warnings.

삭제하지 않고 원본 테이블을 가져 오면 오류 개체가있는 것으로보고되고 성공하더라도 오류는 다음과 같이보고됩니다.

[oracle@centos11 ~]$ imp zsk/zsk@test file=/home/oracle/expdat.dmp

Import: Release 11.2.0.1.0 - Production on Tue Jan 19 20:27:24 2021

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 - 64bit 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 ZSK's objects into ZSK
. importing ZSK's objects into ZSK
IMP-00015: following statement failed because the object already exists:
 "CREATE TABLE "EMPS" ("EMPNO" NUMBER(4, 0), "ENAME" VARCHAR2(10), "JOB" VARC"
 "HAR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NU"
 "MBER(7, 2), "DEPTNO" NUMBER(2, 0))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRA"
 "NS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST"
 " GROUPS 1 BUFFER_POOL DEFAULT)                    LOGGING NOCOMPRESS"
Import terminated successfully with warnings.

 

 

 


    
   나는

 

추천

출처blog.csdn.net/alwaysbefine/article/details/112757991