다른 테이블스페이스에서 오라클 덤프를 가져오는 방법
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
널 위해서.
이 경우 다음 작업을 수행해야 합니다.
와 함께.DMP 파일을 작성하고 구조(테이블)를 포함하는 SQL 파일을 만듭니다.
imp <xe_username>/<password>@XE file=<filename.dmp> indexfile=index.sql full=y
파일 전체를 검색 및 바꿀 수 있는 텍스트에디터에서 인덱스 파일(index.sql)을 열고 다음 find 및 replace 문을 순서대로 발행합니다(단일 따옴표는 무시).'):
Find: 'REM<space>' Replace: <nothing>
Find: '"<source_tablespace>"' Replace: '"USERS"'
Find: '...' Replace: 'REM ...'
Find: 'CONNECT' Replace: 'REM CONNECT'
인덱스 파일을 저장한 후 Oracle Express Edition 계정에 대해 실행합니다(새로 빈 XE 사용자 계정을 만들거나 새로 고칠 경우 삭제한 후 다시 생성하는 것이 가장 좋습니다).
sqlplus <xe_username>/<password>@XE @index.sql
마지막으로 같은 것을 실행합니다.데이터, 저장 프로시저, 뷰 등을 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랜드에 갇혀 있기 때문에 사용하지 않는 것으로 가정)가 더 낫습니다.
이 문제는 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합니다.
먼저 임시 덤프용 디렉토리를 만듭니다.
AS '/ tempdump AS '/temp/tempdump/' 를 작성 합니다.
READ, DIRECTORY a;a, A;a, A;A, A;A, A;A, A/DIRECTORY TEMPDUP;내보내기:
expdp a/* schemas=a directory=tempdump dumpfile=adump.dmp logfile=adump.log
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
- 덤프 파일을 다른 데이터베이스로 Import합니다(이는 원래 덤프 파일의 복사본을 보관해야 하는 경우에만 필요합니다).
테이블스페이스 이름 변경
테이블스페이스 X의 이름을 Y로 변경하다
권한을 부여하여 expdp 명령용 디렉토리를 만듭니다.
- expdp를 사용하여 덤프 생성
- 이전 사용자 및 이전 테이블 영역 제거(Y)
- 새 테이블스페이스 생성(Y)
- 새 사용자(이 경우 B)를 만들고 권한을 부여합니다(3단계에서 작성한 디렉토리에도).
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
'source' 카테고리의 다른 글
전쟁 파일과 컨테이너가 내장된 실행 가능 항아리 전개에 대한 조언 (0) | 2023.03.07 |
---|---|
어떤 컨트롤러에서 다른 피어 컨트롤러로 일부 데이터를 전달하려면 어떻게 해야 합니까? (0) | 2023.03.07 |
Oracle varchar 값에서 문자의 발생 횟수를 계산하는 방법은 무엇입니까? (0) | 2023.03.07 |
AngularJS에서 입력 필드의 첫 번째 문자를 자동 자본화하는 방법은 무엇입니까? (0) | 2023.03.07 |
Oracle 11G에 SELECT 문 삽입 (0) | 2023.03.07 |