ORACLE/Migration2022. 3. 2. 00:09
반응형

<< System 환경 – Remote export 가 지원되는 경우 >>

   - Source DB :: Linux, Oracle 9i R2 
   - Target DB :: Solaris, Oracle 9i R2 
 ** Named Pipe 사용예제

   1. TNS_Alias 생성
      % vi  $TNS_ADMIN/tnsnames.ora
          REMOTE =
               (DESCRIPTION =
                (ADDRESS_LIST =
                 (ADDRESS = (PROTOCOL = TCP)(HOST = Source_DB_IP)(PORT = 1521))
               )
               (CONNECT_DATA =
                (SERVER = DEDICATED)
                 (SERVICE_NAME = ORCL)
               )
              )

   2. Named Pipe 생성                            Target DB !!
       % mknod /tmp/exp_pipe p

   3. Export / Import                           Target DB !!
      % exp ID/PWD@REMOTE file=/tmp/exp_p log=exp_log buffer=10240000 directy=y &
      % imp ID/PWD file=/tmp/exp_p  log=imp_log commit=y feedback=100 indexes=n …


** Source DB 에 export 받은 공간이 없는 경우에도 사용함 !!

=====================================================================
DBA_TAB_COLUMNS

[[ Named Pipe를 이용한 exp/imp ]]



- 프로세스간 데이터 전송에 사용되며, 클라이언트/서버간에 유용하게 사용된다
- 일반적으로로 string을 주고 받는다
- 두 프로세스간의 통로 이다, Named Pipe는 명시적인 Pipe로 네트워크간 통신에 사용하기 편리 하다
- export + dmp파일 전송 + import 의 세가지 작업을 동시에 수행힐수 있는 방법이 Named Pipe를

   사용하는것이다
- 이론상으로는 source 에서 Named Pipe를 향해 export를 수행하고, 그와 동시에 target에서는

    Named Piped로부터
    import 작업을 수행 하기 때문에 거의 export 시간에 import 작업이 끝난다고 볼수 있다.



* 네트워크를 통해 데이터가 전송되기 때문에 데이터에 대한 정합성 문제가 발생할수 있어서
  작업시간이 문제가 되지 않는 경우를 제외하고는 그다지 사용을 권하지 않는다


(예제_1) source 및 target 동일 유저로 exp/imp



- source = devdb    / test 유저
- target = devmigdb / test 유저

-  작업 순서
      1) 파이프 생성
      2) target 에서 source에 network울 통한 접속으로 export 작업수행 --> Named Pipe에 write
      3) targer 에서 Named Pipe를 통해서 읽기 및 해당 테이블에 insert
  
<<kk.sh>>

rm /tmp/exp_pipe_1
mknod /tmp/exp_pipe_1 p
exp test/test1234@devdb file=/tmp/exp_pipe_1 direct=y constraints=n log=exp_TEST_`date +"%Y%m%d"`.log parfile=p_Test.par &
imp test/test1234 file=/tmp/exp_pipe_1 log=imp_TEST_`date +"%Y%m%d"`.log ignore=y commit=y indexes=n constraints=n grants=n buffer=102400000 parfile=p_Test.par &



<p_Test.par>
feedback=10000
tables=IG_EMP



(예제_2) source 및 target ekfms 유저로 exp/imp



- source = devdb    / scott 유저
- target = devmigdb / test 유저

-  작업 순서
      1) 파이프 생성
      2) target 에서 source에 network울 통한 접속으로 export 작업수행 --> Named Pipe에 write
      3) targer 에서 Named Pipe를 통해서 읽기 및 해당 테이블에 insert



<<zz.sh>>

rm /tmp/exp_pipe_1
mknod /tmp/exp_pipe_1 p
exp scott/tiger333@devdb file=/tmp/exp_pipe_1 direct=y constraints=n log=exp_SCOTT_`date +"%Y%m%d"`.log parfile=p_Scott.par &
imp test/test1234 file=/tmp/exp_pipe_1 log=imp_TEST_`date +"%Y%m%d"`.log ignore=y commit=y indexes=n constraints=n grants=n buffer=102400000 parfile=p_Scott.par &



<p_Scott.par>
feedback=10000
tables=LARGE_EMP



(결과)



step_1) source data 건수



           DEVDB_SCOTT> select count(*) from large_emp ;

                             COUNT(*)
                             ----------
                             1091410



step_2) target에서 작업수행
       
 oracle@migdevdb_MIGDB:/oradata/work/> sh zz.sh



 Import: Release 11.2.0.4.0 - Production on 목 9월 3 15:02:35 2015
 Export: Release 11.2.0.4.0 - Production on 목 9월 3 15:02:35 2015

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


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


 다음에 접속됨: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options

 다음에 접속됨: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options
 KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 익스포트가 종료되었습니다
 경고: 테이블 제약 조건이 익스포트되지 않습니다

 지정된 테이블을 익스포트하려고 합니다 via 디렉토리 경로 ...
 . .                       LARGE_EMP 테이블 익스포트 중
 익스포트 파일은 직접 경로를 거쳐 EXPORT:V11.02.00 에 의해 생성되었습니다

 경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

 KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
 . SCOTT 객체를 TEST(으)로 임포트하는 중입니다
 . SCOTT 객체를 TEST(으)로 임포트하는 중입니다
 . . 테이블                    "LARGE_EMP"(를)을 임포트 중
 ...
 ...................................................................................................................................................
 ...
 ................................................................
                                                       1091410개의 행이 엑스포트되었습니다
 익스포트가 경고 없이 정상적으로 종료되었습니다.
 .
                                                       1091410 행이 임포트되었습니다
 임포트가 경고 없이 정상적으로 종료되었습니다.


step_3)  target 에서 결과 확인 --> step_2) 작업중에 건수가 증가하는것을 볼수 있다


   COUNT(*)
 ----------
     458738

 MIGDB_TEST> /

   COUNT(*)
 ----------
     491505

 MIGDB_TEST> /

   COUNT(*)
 ----------
     524272

 MIGDB_TEST> /

   COUNT(*)
 ----------
     557039

 MIGDB_TEST> /

   COUNT(*)
 ----------
     589806


(참고)



일반적으로 다른 스키마로의 import 작업시에는 system 유저로 작업을 수행 하며,

fromuser , touser 의 옵션을 사용하여야 하나

Named Pipe를 이용할경우에는 fromuser, touser 옵션을 사용하지 않고 직접 해당 유저에서 작업이 이루어 진다.

반응형
Posted by [PineTree]
ORACLE/Migration2022. 2. 28. 00:23
반응형

오라클 데이터펌프

create directory pump_dir as '/backup/datapump';

grant read,write on directory pump_dir to hr;

expdp system/oracle dumpfile=scott.dmp directory=pump_dir schemas=scott

schema import
SYS@newdb> select tablespace_name, contents from dba_tablespaces;
Schema import 작업시 export 했을때의 정보들과 명칭이 다르면 remap 작업을 해줘야합니다. 
scott 계정을 import 하기위해서  default tablespace와 
default temporary tablespace의 명칭을 맞춰줘야하니 미리 확인해봤습니다. 
기본으로 사용할  tablespace도 만들어주겠습니다.

 

SYS@newdb> create tablespace dump datafile '/opt/oracle/app/oradata/newdb/dump01.dbf' size 200m;
스키마의 기본 테이블스페이스를 미리 만들어줬습니다. 이제 import 작업을 진행해보겠습니다.

impdp system/oracle dumpfile=scott.dmp directory=pump_dir remap_tablespace=users:dump

impdp system/oracle dumpfile=hr.dmp directory=pump_dir remap_schema=hr:scott remap_tablespace=examples:dump
database link 생성
create database link expdp_net01 connect to system \
identified by oracle using 'expdp_test'

db link 확인
*Local DB에 파일 남기기

expdp system/oracle network_link=expdp_net01 directory=dump_dir \
dumpfile=expdp_net01_%U.dmp logfile=expdp_net01.log \
job_name=net_01 

※ Long TYPE 등 NETWORK_LINK로 받아지지 않는 것이 있으므로 확인 필요

*Remote DB에 파일 남기기
expdp system/oracle@expdp_test directory=dump+dir \
dumpfile=expdp_net01_%U.dmp logfile=expdp+net01.log \
jog_name =remote_exp 

※DB Link와 Network_Link를 이용하면 Local DB쪽에 dmp 파일이 생성되며,Network Alias만 이용하면
Remote DB쪽에 dmp파일이 생성된다.

 

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

database link 생성
create database link expdp_net01 connect to system \
identified by oracle using 'expdp_test'

db link 확인
*Local DB에 파일 남기기

expdp system/oracle network_link=expdp_net01 directory=dump_dir \
dumpfile=expdp_net01_%U.dmp logfile=expdp_net01.log \
job_name=net_01 

※ Long TYPE 등 NETWORK_LINK로 받아지지 않는 것이 있으므로 확인 필요

*Remote DB에 파일 남기기
expdp system/oracle@expdp_test directory=dump+dir \
dumpfile=expdp_net01_%U.dmp logfile=expdp+net01.log \
jog_name =remote_exp 

※DB Link와 Network_Link를 이용하면 Local DB쪽에 dmp 파일이 생성되며,Network Alias만 이용하면
Remote DB쪽에 dmp파일이 생성된다.​


============================================================================CTAS 활용과 주의사항

테이블의 형식만 복사하기 위한 마이그레이션 작업에 사용된다.
기존 테이블의 데이터를 새로 생성하기 위해 테이블 재구성에 사용된다.
기존 테이블이 가지고있는 기본값, 제약조건, 인덱스 등은 복사할 수 없다.
파티션 테이블일 경우엔 일반 테이블로 복사된다.

select 'create table ' ||segment_name||' as select * from '||owner||'.'||segment_name||'@'||'link'||';' 
from dba_segments
where owner='SYS' and segment_type='TABLE PARTITION' and  rownum <11;

SQL> select distinct segment_type from dba_segments;

SEGMENT_TYPE
------------------
INDEX
CLUSTER
TABLE PARTITION
LOBINDEX
TABLE SUBPARTITION
SYSTEM STATISTICS
LOBSEGMENT
INDEX PARTITION
ROLLBACK
TABLE
LOB PARTITION
NESTED TABLE
TYPE2 UNDO

select 'insert into  ' ||segment_name||' as select * from '||owner||'.'||segment_name||'@'||'link'||';' 
from dba_segments
where owner='SYS' and segment_type='TABLE PARTITION' AND rownum <11;

select segment_TYPE,COUNT(*) FROM DBA_SEGMENTS GROUP BY SEGMENT_TYPE;


select 'create table ' ||table_name||' as select * from '||owner||'.'||table_name||'@'||'link'||';' 
from dba_tables
where owner='SYS' and rownum <11;

select 'insert into  ' ||segment_name||' as select * from '||owner||'.'||segment_name||'@'||'link'||';' 
from dba_segments
where owner='SYS' and segment_type='TABLE' AND rownum <11;

select owner,segment_name,PARTITION_NAME
from dba_segments
where owner='SYS' and segment_type='TABLE' and PARTITION_NAME <> ''

 select table_name from dict where table_name like '%PARTITION%';
 
select table_owner,table_name,PARTITION_NAME,PARTITION_POSITION from dba_tab_partitions order by 1,2,4;


select table_owner,table_name,count(*) from dba_tab_partitions group by table_owner,table_name;

SQL> CREATE PUBLIC DATABASE LINK 링크이름
CONNECT TO <연결하고자 하는 user>
IDENTIFIED BY <연결하고자 하는 user password>
USING '원격 db alias'

일반유저에게 Private DB LINK 생성권한 부여
SQL> grant create database link to 유저명;


Public 으로 생성 할 수 있는 권한 부여
SQL> grant create public database link to 유저명;


dba_db_links dictionary 에서 자세한 내용 조회 가능합니다

SQL> select * from dba_db_links;


사용법은 다음 과 같습니다.
select 컬럼명 from 테이블명@db_link명

connect scott/tiger;
select dbms_metadata.get_ddl('TABLE',u.table_name )
from user_tables u;
select dbms_metadata.get_ddl('INDEX',u.index_name)
from user_indexes u;

반응형
Posted by [PineTree]
ORACLE/Migration2015. 9. 14. 21:37
반응형

RMAN을 사용한 raw device migration


출 처: http://jhroom.co.kr/21369
예전에 테스트했던 자료인데.. ASM -> filesystem의 경우에도 가능합니다..
개요
Oracle datafile을 raw device에서 file system file로, 또는 반대로 file system에서 raw device로 변환하기 위해 일반적으로 dd 명령을 주로 사용하게 되는데, Operating System마다 각기 다른 raw device control block size를 가지고 있기 때문에 작업 수행시 추가적인 확인 작업이 필요하다. 그러나 RMAN을 사용하여 변환 작업을 수행하면 이와 같은 과정 없이 변환이 가능하다.
작업절차
본 시나리오에서는 데이터베이스 전체에 대해 raw device/file system 상호 변환하는 과정을 테스트하였다.

##        RAW DEVICE -> FILE SYSTEM

1. Database mount

SQL> startup mount

2. Control file 재생성을 위해 trace 형태로 백업 수행

SQL> alter database backup controlfile to trace;

3. Raw device로 되어 있는 spfile을 pfile로 변경

SQL> create pfile from spfile;

4. Password file 재생성

ORA10@/oracle/product/10.2.0/dbs> orapwd file=orapwORA10 password=oracle force=y

5. RMAN을 이용하여 raw device datafile을 file system으로 변환

ORA10@/oracle> rman nocatalog target /
RMAN> copy datafile '/dev/raw/raw1' to '/oracle/oradata/ORA10/system.dbf'; -- 이처럼 파일마다 개별적으로 작업이 가능하지만, DB 전체를 복사할 경우 아래와 같이 작업한다.
RMAN> backup as copy database;

6. 위 단계에서 backup된 datafile들을 실제로 사용할 file 이름으로 변경

ORA10@/oracle> mv data_D-ORA10_I-650271866_TS-SYSTEM_FNO-1_04jsnkjp /oracle/oradata/ORA10/system.dbf
ORA10@/oracle> mv data_D-ORA10_I-650271866_TS-UNDOTBS1_FNO-2_05jsnkl6 /oracle/oradata/ORA10/undotbs1.dbf
ORA10@/oracle> mv data_D-ORA10_I-650271866_TS-SYSAUX_FNO-3_06jsnkmt /oracle/oradata/ORA10/sysaux.dbf
ORA10@/oracle> mv data_D-ORA10_I-650271866_TS-USERS_FNO-4_07jsnkol /oracle/oradata/ORA10/users.dbf

7. Parameter file(init.ora)을 열어 재 생성될 control file 경로를 지정

ORA10@/oracle/product/10.2.0/dbs> vi initORA10.ora
control_files='/oracle/oradata/ORA10/control01.ctl','/oracle/oradata/ORA10/control02.ctl'

8. Database shutdown

SQL> shutdown immediate;

9. 2번 단계에서 생성된 스크립트를 수정하여 datafile들의 새로운 경로를 지정한 후, resetlogs 옵션으로 데이터베이스를 오픈한다. 그리고 오픈 후 temp file들도 생성해 준다.

SQL> STARTUP NOMOUNT
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle/oradata/ORA10/redo01.dbf'  SIZE 45M,
  GROUP 2 '/oracle/oradata/ORA10/redo02.dbf'  SIZE 45M
DATAFILE
  '/oracle/oradata/ORA10/sysaux.dbf',  
  '/oracle/oradata/ORA10/system.dbf',  
  '/oracle/oradata/ORA10/undotbs1.dbf', 
  '/oracle/oradata/ORA10/users.dbf'
CHARACTER SET KO16MSWIN949;
 
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: change 179042 generated at 10/09/2008 14:50:53 needed for thread 1
ORA-00289: suggestion : /oracle/product/10.2.0/dbs/arch1_11_667665402.dbf
ORA-00280: change 179042 for thread 1 is in sequence #11
 
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/oradata/ORA10/temp.dbf' SIZE 200M;


##        FILE SYSTEM -> RAW DEVICE

1. Database mount

SQL> startup mount

2. Control file 재생성을 위해 trace 형태로 백업 수행

SQL> alter database backup controlfile to trace;

3. Password file을 raw device로 변경

ORA10@/oracle/product/10.2.0/dbs> dd if=orapwORA10 of=/dev/raw/raw13
ORA10@/oracle/product/10.2.0/dbs> rm -f orapwORA10
ORA10@/oracle/product/10.2.0/dbs> ln -s /dev/raw/raw13 orapwORA10

4. RMAN을 사용하여 file system datafile을 raw device로 변환

ORA10@/oracle> rman nocatalog target /
RMAN> copy datafile '/oracle/oradata/ORA10/system.dbf' to '/dev/raw/raw1';
RMAN> copy datafile '/oracle/oradata/ORA10/sysaux.dbf' to '/dev/raw/raw2';
RMAN> copy datafile '/oracle/oradata/ORA10/users.dbf' to '/dev/raw/raw6';
RMAN> copy datafile '/oracle/oradata/ORA10/undotbs1.dbf' to '/dev/raw/raw3';

5. Parameter file(init.ora)을 수정하여 재 생성될 control file의 경로 지정

ORA10@/oracle/product/10.2.0/dbs> vi initORA10.ora
control_files='/dev/raw/raw10','/dev/raw/raw11'

6. Database shutdown

SQL> shutdown immediate;

7. 2번 단계에서 생성된 스크립트를 수정하여 datafile들의 새로운 경로를 지정한 후, resetlogs 옵션으로 데이터베이스를 오픈한다. 그리고 오픈 후 temp file들도 생성해 준다.

SQL> STARTUP NOMOUNT
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10" RESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/dev/raw/raw8'  SIZE 45M,
  GROUP 2 '/dev/raw/raw9'  SIZE 45M
-- STANDBY LOGFILE
DATAFILE
  '/dev/raw/raw1',
  '/dev/raw/raw3',
  '/dev/raw/raw2',
  '/dev/raw/raw6'
CHARACTER SET KO16MSWIN949
;

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: change 179846 generated at 10/09/2008 16:45:11 needed for thread 1
ORA-00289: suggestion : /oracle/product/10.2.0/dbs/arch1_1_667672438.dbf
ORA-00280: change 179846 for thread 1 is in sequence #1
  
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/dev/raw/raw5' size 190M REUSE;

8. File system으로 되어 있는 pfile을 raw device spfile로 변환

SQL> create spfile='/dev/raw/raw12' from pfile;

9. Parameter file을 수정하여 spfile을 사용하도록 지정한다.

ORA10@/oracle/product/10.2.0/dbs> vi initORA10.ora
SPFILE=/dev/raw/raw12


반응형
Posted by [PineTree]
ORACLE/Migration2015. 9. 14. 21:31
반응형
출처 : http://blog.naver.com/itisksc/30046860726
1. raw device에는 LVCB(Logical Volume Control Block)가 있지만
   file system에는 없음.

 

   - bs    : 파일 입출력의 block(버퍼) 크기

   - skip  : 입력 파일에서 처리하지 않고 통과할 블록의 개수
             (Raw Device to Filesystem 복사 시 지정해야 함)
   - seek  : 출력 파일에서 처리하지 않고 통과할 블록의 개수
             (Filesystem to Raw Device 복사 시 지정해야 함)

   - count : 복사할 회수 or 블록의 개수 (생략 시 모든 데이터 복사 )

             (Raw Device to Filesystem 복사 시 반드시 명시해야 함,
              그 이외의 경우는 생략 가능)

플랫폼
LVCB
플랫폼
LVCB
Solaris
0
True64
64KB
HP-UX
0
Linux
0
AIX
4KB
Windows
0

 

2. dbfsize로 확인

   $ORACLE_HOME/bin/dbfsize <Oracle Datafile 명>

   [file system 결과]
   /data05/TESTDB] dbfsize UNDO01_01.dbf
   Database file: UNDO01_01.dbf
   Database file type: file system             : File Type
   Database file size: 128000 8192 byte blocks :8192 byte Block이 128000 개

 

   [raw device 결과]

   Database file type: raw device             : File Type

   Database file size: 1408 8192 byte blocks  : 8192 byte Block이 1408 개

   ※ dbsize로 조회한 결과(Dictionary View에서 select로 조회한
      block 수도 마찬가지)에는 Datafile Header Block 및 LVCB가 포함되지 않음
 
      다음과 같은 경우에는 파일이 손상된 경우이므로 다시 복사
      Header block file size is bad;            trying raw file format...
      Header block magic number is bad
 
3. 참고사항
1) Raw Device 에서 Filesystem으로 변환
   dd if=/dev/rv_data001 of=/data01/TESTDB/data001.dbf bs=4096
      skip=1 count=2818
2) Filesystem 에서 Raw Device로 변환
   dd if=/data01/TESTDB/data001.dbf of=/dev/rv_data001 bs=4096 seek=1
3) Raw Device 에서 Raw Device로 복사
   dd if=/dev/re_data001 of=/dev/rv_data001_bk bs=4096 skip=1 seek=1
4) Filesystem 에서 file system으로 복사
   cp /data01/TESTDB/data001.dbf /data01/TESTDB/data001.bak


반응형
Posted by [PineTree]
ORACLE/Migration2015. 9. 14. 21:26
반응형
출처 : http://blog.naver.com/itisksc/30046151023

복사om/itisksc/30046151023

이관 - 오라클 exp/imp를 이용한 단순 이관 방법 및 순서 

2009.04.13. 17:20


No.

서버

작업순서

작업내용

비고

1OLD테이블스페이스 파악각 업무별 Tablespace 및 Size 조회 
2OLDUser/Role 정보 및 권한 파악각 User별 Default Tablespace 및 Temporary, Password, Lock&Expire, Profile 등 
3OLDUser별 Object수 파악이관 작업 후 확인자료로 사용하기 위한 Object 수 파악(Table/Index/PK/FK/CK/SP/SF/Trigger/Sequece/Grant/DB Link 등등) 
4OLDObject별 Status이관 작업 후 확인자료로 사용하기 위한 점검 리스트 작성
(Role/Table/Index/PK/FK/CK/SP/Trigger/Sequece/Synonym/Grant/DB Link 등등)
 
5OLDListener Stoplsnrctl stop 리스너명 
6OLDDB ShutdownSQL> shutdown immediate 
7OLDDB StartupSQL> startup 
8OLDUser별 Export각 업무 단위(User Mode)로 Export(Rows=n Indexes=n Option 사용)크기가 크지 않은 경우 Rows=y Indexes=y로 하고 [9번] 생략
9OLD테이블별 Export테이블의 크기가 큰 것은 별도 Export
테이블의 크기가 작은 것들은 모아서 Export하되 적당한 크기로 분할하여 Export
Direct=y Buffer=102400000 사용
10OLDExport한 .dmp 파일 신규 서버로 복사Ftp 또는 rcp, NFS 등을 이용하여 복사
용량이 부족할 경우 나누어 Export한 파일을 순차적으로 복사하여 Import한 다음 삭제하는 방법으로 작업
NFS를 이용하여 직접 Import는 권장하지 않음
1NEWDB CreateDB 재생성 작업 
2NEWTablespace 재생성업무별, 부하분산 고려한 Tablespace 생성 
3NEWUser 및 Role 생성User/Role생성 후 권한 부여 
4NEWUser별 ImportUser별 Export(rows=n indexes=n)한 .dmp 파일 Import필요시 테이블/인덱스 initial size 조정 
5NEWForegin Key Disable  
6NEWTrigger Disable  
7NEW테이블별 Import테이블별 Export한 .dmp 파일들을 동시에 Import를 여러 개 실행(Ignore=y Commit=y Buffer=102400000)OLD [9번]을 수행하지 않은 경우 이 작업은 Skip
8NEWForegin Key Enable  
9NEWTrigger Enable  
10NEWUser별 Object수 파악이관 작업 후 확인자료로 사용하기 위한 Object 수 파악(Role/Table/Index/PK/FK/CK/SP/SF/Trigger/Sequece/Grant/DB Link 등등) 
11NEWObject별 Status이관 작업 후 확인자료로 사용하기 위한 점검 리스트 작성
(Role/Table/Index/PK/FK/CK/SP/Trigger/Sequece/Synonym/Grant/DB Link 등등)
 
12NEWObject 확인 작업DB 이관 전/후 비교 
13NEWTable Analyze 작업DBMS_STATS Packge를 이용하여 통계정보 생성 
14NEWDB ShutdownSQL> shutdown immediate 
15NEWDB StartupSQL> Startup 
16NEWListener Startlsnrctl start 리스너명 
17NEW응용 프로그램 테스트응용프로그램을 실행하여 테스트 실시 
18NEWListener Stoplsnrctl stop 리스너명 
19NEWDB ShutdownSQL> shutdown immediate 
20NEWArchive log Mode 적용init$SID.ora 수정
SQL> Startup mount
SQL> alter database archivelog
SQL> archive log list
SQL> alter database open
SQL> shutdown immediate
 
21NEWDB Clod백업백업 장비(BCV,DLT,DAT 등)을 이용한 데이터파일 백업  


반응형
Posted by [PineTree]
ORACLE/Migration2015. 9. 6. 18:15
반응형


Problem Description: 
====================== 
How to backup the database on the raw device to the filesystem using 'dd'.




 
 
Solution Description: 
===================== 
 
The following commands will allow you to copy a raw device to the filesystem 
and restore from the filesystem to the raw device. 
 
You must use the dd command to copy from the raw device.  
 
Please Note: 
============  
	1. Caution is required because some AIX backup programs ignore large 
	files; you must	verify that any oversized AIX files are indeed  
        backed up.	  
  
	2. When doing copy/backup operations, please consider the 4KB 
	offset (taken by Oracle) for the Logical Volume Control Block(LVCB) at 
	the beginning of all IBM Virtual Shared Disks when performing 
	backup/restore operations. 
        
        3. When using zero offset raw devices (devices created using:
        # mklv -T O -y new_raw_device VolumeGroup NumberOfPartitions), ensure
        the 'skip' parameter is adjusted accordingly.  The offset can be 4096 
        bytes or 128 KB on AIX logical volumes or zero on AIX logical volumes 
        created with the mklv -T O option.
 
Copying to Filesystem  
--------------------------  
  
Use the command:  
  
% dd if=<raw device name> of=<filesystem name> bs=<BlockSize> 
skip=<SkipInputBlocks> 
  
Example:  
% dd if=/dev/rVh09.za.716c1 of=/a/spdevs04/ibmfs/osupport/dismith/test.ctl 
bs=4096 skip=1 
 
In the above example we specify the blocksize as 4096 bytes and skip 1 block 
for the offset for the Logical Volume Control Block(LVCB) 
 
bs=BlockSize - Specifies both the input and output block size, 
superceding the ibs and obs flags. The block size values specified with 
the bs flag must always be a multiple of the physical block size for the 
media being used. 
 
skip=SkipInputBlocks - Skips the specified SkipInputBlocks value of 
input blocks before starting to copy. 
 
Restoring from Filesystem  
--------------------------  
 
Use the command:  
  
% dd if=/a/spdevs04/ibmfs/osupport/dismith/test.ctl of=/dev/rVh09.za.716c1 
bs=4096 seek=1  
 
In the above example we specify the blocksize as 4096bytes and seek 1 block 
past the beginning of output file before copying, so we will not 
overwrite the Logical Volume Control Block(LVCB) 
 
seek=RecordNumber - Seeks the record specified by the RecordNumber  
variable from the beginning of output file before copying.


반응형
Posted by [PineTree]
ORACLE/Migration2015. 3. 23. 14:17
반응형
1. raw device에는 LVCB(Logical Volume Control Block)가 있지만
   file system에는 없음.

 

   - bs    : 파일 입출력의 block(버퍼) 크기

   - skip  : 입력 파일에서 처리하지 않고 통과할 블록의 개수
             (Raw Device to Filesystem 복사 시 지정해야 함)
   - seek  : 출력 파일에서 처리하지 않고 통과할 블록의 개수
             (Filesystem to Raw Device 복사 시 지정해야 함)

   - count : 복사할 회수 or 블록의 개수 (생략 시 모든 데이터 복사 )

             (Raw Device to Filesystem 복사 시 반드시 명시해야 함,
              그 이외의 경우는 생략 가능)

플랫폼
LVCB
플랫폼
LVCB
Solaris
0
True64
64KB
HP-UX
0
Linux
0
AIX
4KB
Windows
0

 

 

2. dbfsize로 확인

   $ORACLE_HOME/bin/dbfsize <Oracle Datafile 명>

   [file system 결과]
   /data05/TESTDB] dbfsize UNDO01_01.dbf
   Database file: UNDO01_01.dbf
   Database file type: file system             : File Type
   Database file size: 128000 8192 byte blocks :8192 byte Block이 128000 개

 

   [raw device 결과]

   Database file type: raw device             : File Type

   Database file size: 1408 8192 byte blocks  : 8192 byte Block이 1408 개

   ※ dbsize로 조회한 결과(Dictionary View에서 select로 조회한
      block 수도 마찬가지)에는 Datafile Header Block 및 LVCB가 포함되지 않음
 
      다음과 같은 경우에는 파일이 손상된 경우이므로 다시 복사
      Header block file size is bad;            trying raw file format...
      Header block magic number is bad
 
3. 참고사항
1) Raw Device 에서 Filesystem으로 변환
   dd if=/dev/rv_data001 of=/data01/TESTDB/data001.dbf bs=4096
      skip=1 count=2818
2) Filesystem 에서 Raw Device로 변환
   dd if=/data01/TESTDB/data001.dbf of=/dev/rv_data001 bs=4096 seek=1
3) Raw Device 에서 Raw Device로 복사
   dd if=/dev/re_data001 of=/dev/rv_data001_bk bs=4096 skip=1 seek=1
4) Filesystem 에서 file system으로 복사
   cp /data01/TESTDB/data001.dbf /data01/TESTDB/data001.bak
 

[출처] 이관 - raw device to file system(dd copy)|작성자 smileDBA

[출처]    http://power.iotn.co.kr/zboard.php?id=9_1_bbs&no=1197

 


[ Oracle 9.2.0.8 ]

[ filesystem to raw device ]
$ dbfsize /oracle/system/tools01.dbf

Database file: /data/system/tools01.dbf
Database file type: file system
Database file size: 83840 8192 byte blocks

SQL> alter database datafile '/data/system/tools01.dbf' offline;
SQL> !dd if=/data/system/tools01.dbf of=/dev/rdsk/c0t0d0s1 bs=8192 count=83840
83840+0 레코드 입력
83840+0 레코드 출력
SQL> alter database rename file '/data/system/tools01.dbf' to '/dev/rdsk/c0t0d0s1';
SQL> recover datafile '/dev/rdsk/c0t0d0s1';
SQL> alter database datafile '/dev/rdsk/c0t0d0s1' online;

[ raw device to filesystem ]

$ dbfsize /dev/rdsk/c0t0d0s1

Database file: /dev/rdsk/c0t0d0s1
Database file type: raw device
Database file size: 83840 8192 byte blocks

SQL> alter database datafile '/dev/rdsk/c0t0d0s1' offline;
SQL> !dd if=/dev/rdsk/c0t0d0s1 of=/data/system/tools01.dbf bs=8192 count=83840
83840+0 레코드 입력
83840+0 레코드 출력
SQL> alter database rename file '/dev/rdsk/c0t0d0s1' to '/data/system/tools01.dbf';
SQL> recover datafile '/data/system/tools01.dbf';
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 2: '/data/system/tools01.dbf'
ORA-01122: database file 2 failed verification check
ORA-01110: data file 2: '/data/system/tools01.dbf'
ORA-01200: actual file size of 83839 is smaller than correct size of 83840 blocks
SQL> !dd if=/dev/rdsk/c0t0d0s1 of=/data/system/tools01.dbf bs=8192 count=83841
83841+0 레코드 입력
83841+0 레코드 출력
14:31:23 SQL> recover datafile '/data/system/tools01.dbf';
Media recovery complete.
14:31:38 SQL> alter database datafile '/data/system/tools01.dbf' online;
Database altered.

 
  $ rawutl -s /dev/vx/rdsk/oracle/system.dbf [ 운영중인 lv size 2G, datafile size 2G ]
2148532224 [ 2G ]
$ rawutl -s /dev/vx/rdsk/oracle/r_system.dbf [ 임시 복구 lv size 3G, datafile size 2G ]
3221225472 [ 3G ]

$ dbfsize /dev/vx/rdsk/oracle/system.dbf
Database file: /dev/vx/rdsk/oracle/system.dbf
Database file type: raw device
Database file size: 262144 8192 byte blocks

$ dbfsize /dev/vx/rdsk/oracle/r_system.dbf
Database file: /dev/vx/rdsk/oracle/r_system.dbf
Database file type: raw device
Database file size: 262144 8192 byte blocks

SQL> select file#,name,bytes from v$datafile where file#=1;
 FILE# NAME BYTES
---------- ---------------------------------------- ----------
 1 /dev/vx/rdsk/oracle/system.dbf 2147483648 / 8192 = 262144 +1 = 262145

$ dd if=/dev/vx/rdsk/oracle/r_system.dbf of=system.dbf bs=8192 count=262145
$ ls -al
-rw-r--r-- 1 oracle dba 2147491840 9월 7일 13:28 system.dbf

$ dbfsize system.dbf
Database file: system.dbf
Database file type: file system
Database file size: 262144 8192 byte blocks

$ dd if=/dev/vx/rdsk/oracle/r_system.dbf of=system.dbf count=262144
$ ls -al
-rw-r--r-- 1 oracle dba 134217728 9월 7일 13:31 system.dbf [ 134217728 / 262144 = 512 block ]

 

  for AIX

select 'dd if='||f.name||' of='||lower(t.name)||
row_number() over (partition by t.name order by f.file# )||
'.dbf bs=4k count='||to_char(((BLOCKS*BLOCK_SIZE)/4096)+4906)||
' #'||t.name||' '||f.file#
 from v$datafile f,v$tablespace t where t.ts#=f.ts#;

or

select 'dd if='||fname||' of='||lower(tname)||
decode(sign(rn -9),1,'','0')||rn||
'.dbf bs=4k count='||to_char(((BLOCKS*BLOCK_SIZE)/4096)+4906)||
' #'||tname||' '||file#
from (select f.name fname,t.name tname,f.file#,blocks,block_size,
row_number() over (partition by t.name order by f.file# ) rn
from v$datafile f,v$tablespace t where t.ts#=f.ts#);

select 'dd if='||member||' of=redo'||group#||'.log bs=4k count='||to_char(((lesiz*lebsz)/4096)+4096)
 from v$logfile f, x$kccle l where f.group#=l.lenum;

select 'dd if='||name||' of=control.ctl bs=4k count='||to_char(((file_size_blks*block_size)/4096)+4096)
 from v$controlfile where rownum=1;

wait: there are no child processes.
같은 서버에서 test 나기도하고 안나기도함.
파일크기 같고 rename 성공


  -- DSVM prime
vxprint -g data -m gj_v4_001_5g|grep devsubtype
 devsubtype=dsvmprime
dd if=/dev/vx/rdsk/data/gj_v4_001_5g of=/data/oradata/TSADMI_04.dbf bs=8192k
-- DSVM
vxprint -g data -m gj_v3_013_10g|grep devsubtype
 devsubtype=dsvm
dd if=/dev/vx/rdsk/data/gj_v3_013_10g of=/data/oradata/TSADMI_05.dbf bs=4096 skip=1 count=2560002

반응형
Posted by [PineTree]
ORACLE/Migration2010. 2. 4. 17:49
반응형
출처:네이버 prodba 카페 산타님 말씀 ㅋ

import시 touser 가 다르면 데이터가 중복되게 들어갈게 없고.....

대신 touser가 서로 다른 tablespace로 넣고 싶른 경우 tablespace를 readonly로 만들면 다른작업에 영향을 주니... 더 좋은 방법은 touser에 대해
revoke unlimited tablespace from touser;
alter user touser quota 0 on 원치않는모든tablespace;
alter user touser quota unlimited on 원하는tablespace;

이러면...원하는tablespace에만 쓸수 있는 상황이 여기로 들어갑니다.
반응형
Posted by [PineTree]
ORACLE/Migration2009. 8. 28. 15:37
반응형


1) export를 할때 데이터는 만들지 않고 schema image만 뽑아냅니다.
(만약 export를 받은 파일이 이미 있으시다면 1번 항목은 생략하셔도 됩니다.)

exp scott/tiger file=exp.dmp compress=n rows=n



2) 1번 스텝과 같이 해서 성공한 export dump파일을 이용하여 create script를 만드는 방법입니다.
이 방법은 import!라는 유틸리티를 사용하여 작업을 합니다.

imp scott/tiger file=exp.dmp indexfile=create_table.sql full=y



3) 요렇게 하면 create_table.sql이라는게 생성됩니다.
vi나 편집기로 여시면 REM이라는 코멘트로 앞부분이 막혀 있을 겁니다.
이걸 모두 없애시면 그야말로 DBMS내에 있는 형태 그대로 만들어진 Table Create Scripts입니다.
반응형
Posted by [PineTree]
ORACLE/Migration2008. 11. 7. 15:03
반응형


  

7. Data Pump Import 모드

   지금 까지  Data Pump Export 대해 자세히 알아 보았습니다. 데이터베이스 내에 있는 오브

   젝트를 운영체제 파일시스템으로 옮기는 작업을 Data Pump Export 라고 한

   다면 Data Pump Import 작업은 운영체제 파일시스템에 있는 오브젝트 들을 데이터 베이스

   내의 테이블로 옮기는 작업 입니다.  impdp 명령어를 통하여 사용할 수 있으며,

   Data Pump Import 작업에서 처럼 Command 라인, par 파일, Interactive Mode 모두 사용 하

   실 수 있습니다.

 

    1) 파일 및 디렉토리 관련 파라메타

      

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmpSCHEMAS=SCOTT

 

       과 같이 DIRECTORY 는 디렉토리 오브젝트를 받는 파라메타 이고 DUMPFILE 파라메타

       는 Import 될 파일명, SQLFILE 은 작업 수행동안 수행될 DDL문을 저장할 파일이름

       이며, 디렉토리 관련 파라메타 로 설정 됩니다.

    2) 필터링 관련 파라메타

       필터링 파라관련 파라메타 에는 COTENT,INCLUDE,EXCLUDE,TABLE_EXISTS_ACTION 파라메

       터가 있습니다. COTENT,INCLUDE,EXCLUDE 파라메타는 Export 와 마찬가지로 사용 하

       실수 있으며,TABLE_EXISTS_ACTION 파라메타는 오직 Import 작업시에만 사용 할 수 있

       습니다.

        COTENT : CONTENT 파라메타는 DATA_ONLY,ALL,METADATA_ONLY 3가지 값을 가질 수 있

       으며, CONTENT=DATA_ONLY 형식으로 사용 하실 수 있습니다.

       

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp

SCHEMAS=SCOTT CONTENT=DATA_ONLY

 

        INCLUDE : INCLUDE=OBJECT_NAME:"='조건'" 형식으로 사용하실 수 있으며, 오브

       젝트의 종류에는 앞서 배운 것 과 같이 TABLE,INDEX,PORCEDURE,FUNCTION 등이 있습

       니다.

       

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp

SCHEMAS=SCOTT INCLUDE=TABLE:"='SAL'"

 

       SCOTT 유저의 테이블을 Import 하되 SAL 테이블 만 포함 시키라는 명령 이 됩니다

       SCOTT 유저가 EMP,SAL,SALARY 3개의 테이블을 가졌다고 가정하고 하나의 덤프파일에

       3개의 테이블을 Export 받았고, 위와 같은 import 명령을 내린다면 3개의 테이블중

       오직 SAL 테이블 만을 Import 하게 됩니다.

        EXCLUDE : EXCLUDE=OBJECT_NAME:"='조건'" 형식으로 사용하실 수 있으며, 마찬가지

       로 오브젝트 종류는 INCLUDE 와 같습니다.

 

       

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp

SCHEMAS=SCOTT EXCLUDE=TABLE:"='SAL'"

 

       SCOTT 유저의 테이블을 Import 하되 SAL 테이블을 제외한 나머지 테이블을 Import

       하라는 명령이 되겠죠? 마찬가지로 SCOTT 유저가 EMP,SAL,SALARY 3개의 테이블을 가졌

       다고 가정하고 하나의 덤프파일에 3개의 테이블을 Export 받았고, 위와 같은 import

       명령을 내린다면 3개의 테이블중 SAL 을 제외한 EMP,SALARY 테이블만 Import 될 것

       입니다.

        TABLE_EXISTS_ACTION : Import 시에 중요한 옵션입니다. 우리가 Data Pump 를 통

       해 작업을 하게될 경우 같은 이름의 테이블이 존재할 때가 있습니다. 만약 테이블이

       존재 하더라도 Import 하고자 하는 데이터의 row 수가 다를 수고 있고 같을 수도 있

       을 겁니다. 즉, 테이블은 존재하지만 데이터의 내용은 차이가 난다는 거죠.

       이러한 경우에 사용할 수 있는 유용한 파라메타가  TABLE_EXISTS_ACTION 입니다.

       TABLE_EXISTS_ACTION 파라메타는  SKIP,APPEND,TRUNCATE,REPLACE 의 값을 가질수 있으

       며 각 값의 의미는 다음과 같습니다.

       - SKIP     : 같은 테이블을 만나면 지나치고 다음 테이블을 Import 합니다.

       - APPEND   : 같은 테이블을 만나면 기존의 데이터에 추가하여 Import 합니다.

       - TRUNCATE : 같은 테이블을 만날경우 기존의 테이블을 TRUNCATE 하고 새로운 데이

                    터를 Import 합니다.

       - REPLACE  : 같은 테이블을 만날 경우 기존의 테이블을 DROP 하고 테이블을 재생성

                    한후 데이터을 Import 합니다.

       

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp

SCHEMAS=SCOTT TABLE_EXISTS_ACTION=SKIP  

 

       위와 같이 실행하면 같은 테이블을 만날경우 그냥 지나치고 다른 테이블을 Import

       하겠죠?

      2) JOB 관련 파라메타

       앞서 학습한 JOB_NAME,STATUS,PARALLEL 파라메타를 Export 와 같은 방법으로 사용

       하실 수 있습니다. Export 와 마찬가지로 PARALLEL 작업시에 dumpfile 의 개수를

       %u를 사용하여 지정하여 주거나, 명시적으로 ','를 사용하여 PARALLEL 개수 만큼

       파일을 지정 하셔야 합니다.

 

      3) 리맵핑 관련 파라메타

      리맵핑 관련 파라메타에는 REMAP_SCHEMA,REAMP_DATAFILE,REMAP_TABLESPACE 가 있으며,

      이들 파라메타 를 통하여 우리는 다른 데이터베이스 로 Import 시에 많은 유연성을 제

      공 받을 수 있습니다.

       REMAP_SCHEMA : A 유저 스키마로 Export 받은 데이터를 B 유저 스키마로 Import 하

      고자 할때 사용 합니다.

      

      

 

impdp dangtong/edu2006 DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp

SCHEMAS=SCOTT REMAP_SCHEMA=SCOTT:DANGTONG

 

      위와 같이 수행한후 TABLE의 OWNER 을 조회 한다면 DANGTONG 유저의 소유로 테이블

      이 등록 되었음을 확인 하실수 있습니다.

       REMAP_DATAFILE : 전체 데이타베이스 시스템을 Data Pump 를 통하여 옮기고자 할때

      Export 된 daumfile 에는 DataFile 정보까지 포함하게 됩니다. 하지만 다른시스템의

      디스크 경로 상에는 존재하지 않는 경로이기 때문에 Import에 실패하게 됩니다. 이러한

      경우에 사용 할 수 있는 파라메타가 REAMP_DATAFILE 입니다. Export 된 dumpfile 이

      Datafile 정보를 포함한 경우에만 해당합니다.

      

 

impdp dangtong/edu2006 FULL=Y DIRECTORY=datapump_dir1

DUMPFILE=datapump.dmp 

REMAP_DATAFILE='/db1/data/lvol01':'/db2/data/lvol01',

               '/db1/data/lvol02':'/db2/data/lvol02'     

                                .

                                .

                                .

 

 

       REMAP_TABLESPACE : Export 받은 데이터 속한 TABLESPACE에서 다른 테이블 스페이

      스로 REMAPPING 하고 하는 경우 사용할 수 있응 파라메타 입니다.

      

 

impdp dangtong/edu2006 REMAP_TABLESPACE='scott_tsb':'dangtong:tbs'

DIRECTORY=datapump_dir1 DUMPFILE=datapump.dmp SCHEMAS=SCOTT

 

      4) 네트웍 링크 파라메타

      Export 에서와 마찬가지로 DB LINK를 이용하여 원격지 데이터베이스에 대해 Import

      작업을 수행할 수 있습니다.

 

      5) Interactive mode 파라메타

      Export 에서와 마찬가지로 Ctrl + C 를 통하여 Interactive mode 로 진입할 수 있으며

      작업을 통제 할 수 있습니다.

 

   8. Data Pump 모니터링 하기  

   이번 장에서는 SQL을 통한 작업 모니터링 방법에 대하여 학습해 보도록 하겠습니다.

   작업의 진행 경과와 작업속성들 그리고 얼마나 많은 작업들이 존재 하는가를 알 수

   있습니다.

      1) 관련 조회 테이블 및 VIEW 들

     

          DBA_DATAPUMP_JOBS 현재 실행중인 작업의 속성들을 살펴 볼 수 있는 테이블

            입니다.

         SQL> select * from dba_datapump_jods;

         로 조회 하시면  다음과 같은 컴럼이 나옵니다.

         - OWNER_NAME  : DB 작업 계정

         - JOB_NAME    : 작업의 명칭

         - JOB_MODE,   : FULL,TABLE,INDEX,TABLESPACE 등이 있습니다.

         - STATE       : EXECUTING(수행중),DEFINING ,UNDEFINED, NOT RUNNING 의 값을

                         가집니다.

          Pump Session 확인

        Select sid,serial# from v$session session,dba_data_session pump_session

        where session.saddr = pump_session.saddr;

         로 조회 하시면 현재 Data Pump 를 통해 수행 중인 모든 Session 들과 상태들을

         모니터링 할 수 있습니다.

          Data Pump  의  모니터링

         SELECT opname,target_desc,sofar,totalwork,(sofar/totalwork*100) Percentage

         FROM v$session_longops;

         opname  : JOBNAME 과 같습니다.

         TOTALWORK : 총 수행하여야할 용량을 가르키며 단위는 Megabytes 입니다.

         sofar     : 현재 수행한 용량 을 가르키며 단위는  Megabytes 입니다.

         target_desc : 작업의 종류를 말합니다. IMPORT/EXPORT 가 값이 될수 있습니다.

반응형
Posted by [PineTree]