source

다른 테이블스페이스에서 오라클 덤프를 가져오는 방법

manycodes 2023. 3. 7. 21:38
반응형

다른 테이블스페이스에서 오라클 덤프를 가져오는 방법

Oracle 덤프를 다른 테이블스페이스로 Import합니다.

사용자 A가 사용하는 테이블스페이스 A가 있습니다.이 사용자에 대한 DBA를 해지하고 연결 및 리소스를 부여했습니다.그럼 난 명령으로 모든 걸 버렸어

exp a/** owner=a file=oracledump.DMP log=log.log compress=y

이제 사용자 B가 사용하는 테이블스페이스 B로 덤프를 Import합니다.그래서 DBA가 아닌 연결 및 리소스에 대한 보조금을 지급했습니다.그런 다음 다음 가져오기를 실행했습니다.

imp b/*** file=oracledump.DMP log=import.log from user=a touser=b

그 결과 오류가 많은 로그가 생성됩니다.

IMP-00017: ORACLE 오류 20001로 인해 다음 문이 실패했습니다. "BEGIN DBMS_STATS.SET_TABLE_STATS IMP-00003: ORACLE 오류 20001에서 ORA-20001이 발생했습니다.입력 값이 잘못되었거나 일치하지 않음

그 후, 같은 Import 커맨드를 시험해 보았습니다만, statistics=none 옵션입니다.이로 인해 다음과 같은 오류가 발생했습니다.

ORA-00959: 테이블스페이스 'A_'TBLSPACE'가 존재하지 않습니다.

어떻게 하면 좋을까요?

주의: 많은 열이 CLOB 유형입니다.그 문제들은 그것과 관련이 있는 것 같다.

주2: Oracle 버전은 9.2, 10.1, 10.1 XE가 혼재되어 있지만 버전과는 관계가 없다고 생각합니다.

몇 가지 문제가 있습니다.

먼저 사용하고 있는 Oracle 버전이 다르기 때문에 테이블 통계 오류가 발생합니다.Oracle 10g Databases 중 일부가 Release 2로 업그레이드되었을 때 같은 문제가 발생했고, 일부는 Release 1에 남아 스와프 중입니다.그 사이에 있는 DMP 파일

가 있었던 은 같은 의 VIP를 이었습니다.exp ★★★★★★★★★★★★★★★★★」imp여러 데이터베이스 인스턴스에서 내보내기 및 가져오기를 수행하는 도구입니다.이 작업은 동일한 PC(또는 Oracle Server)를 사용하여 모든 내보내기 및 가져오기 명령을 발행함으로써 가장 쉽게 수행할 수 있습니다.

둘째, 내 생각엔 네가 이 모든 걸 다 알고 있는 것 같아ORA-00959: tablespace 'A_TBLSPACE' does not exist완전한 Edition로의 DMP 파일으로 Oracle 10g Express Edition(XE)이라는 이름의 사전 됩니다.USERS널 위해서.

이 경우 다음 작업을 수행해야 합니다.

  1. 와 함께.DMP 파일을 작성하고 구조(테이블)를 포함하는 SQL 파일을 만듭니다.

    imp <xe_username>/<password>@XE file=<filename.dmp> indexfile=index.sql full=y

  2. 파일 전체를 검색 및 바꿀 수 있는 텍스트에디터에서 인덱스 파일(index.sql)을 열고 다음 find 및 replace 문을 순서대로 발행합니다(단일 따옴표는 무시).'):

    Find: 'REM<space>' Replace: <nothing>

    Find: '"<source_tablespace>"' Replace: '"USERS"'

    Find: '...' Replace: 'REM ...'

    Find: 'CONNECT' Replace: 'REM CONNECT'

  3. 인덱스 파일을 저장한 후 Oracle Express Edition 계정에 대해 실행합니다(새로 빈 XE 사용자 계정을 만들거나 새로 고칠 경우 삭제한 후 다시 생성하는 것이 가장 좋습니다).

    sqlplus <xe_username>/<password>@XE @index.sql

  4. 마지막으로 같은 것을 실행합니다.데이터, 저장 프로시저, 뷰 등을 Import하기 위해 동일한 계정에 대해 인덱스 파일을 만든 DMP 파일:

    imp <xe_username>/<password>@XE file=<filename.dmp> fromuser=<original_username> touser=<xe_username> ignore=y

Oracle이 동일한 데이터베이스 식별자를 사용하려고 할 때 데이터베이스 작업 등의 특정 개체를 만들 때 Oracle 오류 페이지가 나타날 수 있습니다. 이는 다른 데이터베이스에 있을 때 실패할 수 있습니다.

Oracle 10g 및 datapump를 사용하는 경우 REMAP_TABLESPACE 절을 사용할 수 있습니다.예:

REMAP_TABLESPACE=A_TBLSPACE:NEW_TABLESPACE_GOES_HERE

이 작업은 정상입니다(Oracle Database 10g Express Edition 릴리스 10.2.0.1.0).

impdp B/B full=Y dumpfile=DUMP.dmp REMAP_TABLESPACE=OLD_TABLESPACE:USERS

그러나 새로운 복원을 위해서는 새로운 테이블스페이스가 필요합니다.

추신. 아마도 도움이 될 것이다. http://www.oracle-base.com/articles/10g/OracleDataPump10g.php

어떤 버전의 Oracle을 사용하고 있습니까?10g 이상이면 Import/export 대신 Data Pump를 사용하는 것이 좋습니다.이 시나리오에 대응할 수 있을지 100% 확신할 수는 없지만, 충분히 대응할 수 있을 것 같습니다.

Data Pump는 10g 이상의 exp/imp를 대체합니다.exp/imp와 매우 비슷하지만 (9i랜드에 갇혀 있기 때문에 사용하지 않는 것으로 가정)가 더 낫습니다.

Data Pump 관련 문서는 다음과 같습니다.

이 문제는 CLOB 컬럼과 관련이 있습니다.imp 툴은 다른 테이블스페이스를 사용하기 위해 create 문을 다시 쓸 수 없는 것 같습니다.

출처 : http://asktom.oracle.com/pls/asktom/f?p=100:11:0 : : : : P11 _ QUESTION _ ID : 66890284723848

해결책은 스키마를 올바른 테이블스페이스에 손으로 작성하는 것입니다.스키마를 생성할 스크립트가 없는 경우 imp 툴의 indexfile=을 사용하여 스키마를 생성할 수 있습니다.

oracle imp 툴에서는 모든 제약을 직접 비활성화해야 합니다.

그런 다음 다음 명령을 사용하여 데이터를 가져올 수 있습니다.

imp b/** file=oracledump.dmp log=import.log fromuser=a touser=b statistics=none ignore=y

주의: 다른 오류로 인해 statistics=none이 필요했습니다.

데이터 펌프에 대한 추가 정보

Oracle 10에서는 Import/export 기능이 향상되었습니다.데이터 펌프 툴([http://www.oracle-base.com/articles/10g/OracleDataPump10g.php][1])

이를 통해 데이터를 새 테이블스페이스로 다시 Import합니다.

  1. 먼저 임시 덤프용 디렉토리를 만듭니다.

    AS '/ tempdump AS '/temp/tempdump/' 를 작성 합니다.
    READ, DIRECTORY a;a, A;a, A;A, A;A, A;A, A/DIRECTORY TEMPDUP;

  2. 내보내기:

    expdp a/* schemas=a directory=tempdump dumpfile=adump.dmp logfile=adump.log

  3. Import:

    impdp b/* directory=tempdump dump file=adump.dmp logfile=bdump.log REMAP_SHEMA=a:b

주의: 덤프 파일은 로컬(클라이언트) 디스크가 아닌 서버 디스크에서 저장 및 읽습니다.

해결 방법은 GSAR 유틸리티를 사용하여 DUMP 파일의 테이블 영역 이름을 바꾸는 것입니다.복제할 때 공간을 추가하여 덤프 파일의 크기가 변경되지 않았는지 확인하십시오.예.

gsar -f -s"TSDAT_OV101" -r"USERS      " rm_schema.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS      """ ENABLE STORAGE IN ROW CHUNK 8192 RETENTION" -r"                                                                   " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS      """ LOGGING" -r"                                  " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS      """ " -r"                             " rm_schema.n.dump rm_schema.n1.dump

서로 다른 서버(데이터베이스) 상의 서로 다른 테이블스페이스에 있는 두 사용자의 성능을 향상시키고 싶다.

1. 먼저 두 서버(데이터베이스)의 임시 덤프 디렉토리를 작성합니다.

서버 #1:

CREATE OR REPLACE DIRECTORY tempdump AS '/temp/old_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO old_user;

서버 #2:

CREATE OR REPLACE DIRECTORY tempdump AS '/temp/new_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO new_user;

2. 내보내기(서버 #1):

expdp tables=old_user.table directory=tempdump dumpfile=adump.dmp logfile=adump.log

3. Import (서버 #2) :

impdp directory=tempdump dumpfile=adump_table.dmp logfile=bdump_table.log
REMAP_TABLESPACE=old_tablespace:new_tablespace REMAP_SCHEMA=old_user:new_user

답은 어렵지만 실행 가능합니다.

상황: 사용자 A와 테이블스페이스 X

  1. 덤프 파일을 다른 데이터베이스로 Import합니다(이는 원래 덤프 파일의 복사본을 보관해야 하는 경우에만 필요합니다).
  2. 테이블스페이스 이름 변경

    테이블스페이스 X의 이름을 Y로 변경하다

  3. 권한을 부여하여 expdp 명령용 디렉토리를 만듭니다.

  4. expdp를 사용하여 덤프 생성
  5. 이전 사용자 및 이전 테이블 영역 제거(Y)
  6. 새 테이블스페이스 생성(Y)
  7. 새 사용자(이 경우 B)를 만들고 권한을 부여합니다(3단계에서 작성한 디렉토리에도).
  8. impd를 사용하여 덤프를 Import하다

    impdp B/B 디렉토리=DIR 덤프 파일=DUMPFILE.dmp logfile=LOGFILE.log REMAP_SCHEMA=A:B.

그게 다야...

imp 12 (Oracle 12.1|2로) 를 합니다.exp에서 가져온 에는 접근 .DATABASE_TABLESPACE기본 테이블스페이스가 아닌 해당 이름의 새 테이블스페이스를 사용하도록 스키마/사용자를 작성했습니다.USERS(타깃 데이터베이스에 대한 접근 권한이 없음):

-- don't care about the details
CREATE TABLESPACE DATABASE_TABLESPACE
  DATAFILE 'DATABASE_TABLESPACE.dat' 
    SIZE 10M
    REUSE
    AUTOEXTEND ON NEXT 10M MAXSIZE 200M;

ALTER DATABASE DEFAULT TABLESPACE DATABASE_TABLESPACE;

CREATE USER username
  IDENTIFIED BY userpassword
  CONTAINER=all;

GRANT create session TO username;
GRANT create table TO username;
GRANT create view TO username;
GRANT create any trigger TO username;
GRANT create any procedure TO username;
GRANT create sequence TO username;
GRANT create synonym TO username;
GRANT create synonym TO username;
GRANT UNLIMITED TABLESPACE TO username;

exp여기서부터 작성되다imp내 목표물에 만족해.

---새 테이블스페이스 작성:

테이블스페이스 작성 테이블스페이스 이름 데이터 파일 D:\ORACL\ORADA\XE\테이블스페이스 파일명DBF' Size 350M 자동 확장, 최대 2500M 로그 무제한 영구 익스텐트 관리 로컬 자동 할당 블록 크기 8K 세그먼트 공간 관리 매뉴얼 플래시백 켜짐

---다음 명령어를 사용하여 Import합니다.

기본 테이블스페이스 테이블스페이스 테이블스페이스 테이블스페이스로 식별되는 사용자 BVUSER 생성

-- 여기서 D:\ORACL은 Oracle 설치 경로입니다.

언급URL : https://stackoverflow.com/questions/61963/howto-import-an-oracle-dump-in-an-different-tablespace

반응형