ORACLE/Backup & Recovery2010. 3. 22. 11:12
반응형

출처:http://www.oracleinternal.com/

데 이터베이스를 복사하는 절차에 대해서 알아보겠습니다.
orcl DB를 clon으로 복사할것이며 대략적인 절차는 다음과 같습니다.

1. Parameter file 생성
2. Control file 생성
3. 새로운 데이터베이스에 필요한 디렉토리 생성
4. datafile 복사
5. clone DB로 접속후 control을 생성하기 위해 nomount로 시작합니다.
6. control file 생성
7. 데이터베이스를 오픈합니다.

1. Parameter file 준비
SQL> conn / as sysdba
Connected.
SQL> create pfile='$ORACLE_HOME/dbs/initclone.ora' from spfile;

File created.

생성된 pfile을 수정합니다.
SQL> host vi $ORACLE_HOME/dbs/initclone.ora
모든 인스턴스를 의미하는 *.을 치환을 통하여 제거합니다.
:%s/*.//g
메모리 사이즈를 경정하지 않습니다. 다음 부분이 들어가는 행을 삭제합니다.
db_cache_size, java_pool_size, large_pool_size, shared_pool_size, streams_pool_size
orcl이 들어간 부분을 clone으로 치환합니다.
:%s/orcl/clone/g
수정된 pfile 입니다.


audit_file_dest='/u01/app/oracle/admin/clone/adump'

background_dump_dest='/u01/app/oracle/admin/clone/bdump'

compatible='10.2.0.1.0'

control_files='/u01/app/oracle/oradata/clone/control01.ctl','/u01/app/oracle/oradata/clone/control02.ctl','/u01/app/oracle/oradata/clone/control03.ctl'

core_dump_dest='/u01/app/oracle/admin/clone/cdump'

db_block_size=8192

db_file_multiblock_read_count=16

db_name='clone'

db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

db_recovery_file_dest_size=2147483648

dispatchers='(PROTOCOL=TCP) (SERVICE=cloneXDB)'

job_queue_processes=10

open_cursors=300

pga_aggregate_target=94371840

processes=150

remote_login_passwordfile='EXCLUSIVE'

sga_target=285212672

undo_management='AUTO'

undo_tablespace='UNDOTBS1'

user_dump_dest='/u01/app/oracle/admin/clone/udump'


2. Control file 생성
Control file 생성 스크립트를 생성합니다.
SQL> alter database backup controlfile to trace;

Database altered.

SQL> host ls -t $ORACLE_BASE/admin/orcl/udump/ | head -1
orcl_ora_2213.trc

user_dump_dest 에서 생성된 스크립트를 찾습니다.
실제 경로는 다음을 통하여 확인할수 있습니다.
SQL> select value from v$parameter where name='user_dump_dest';

VALUE
----------------------------------------
/u01/app/oracle/admin/orcl/udump

가장 최근에 발생한 파일을 찾습니다.
SQL> host ls -t $ORACLE_BASE/admin/orcl/udump/ | head -1
orcl_ora_2213.trc

생성된 파일을 확인하고 활용하기 위해 복사합니다.
SQL> host cp $ORACLE_BASE/admin/orcl/udump/orcl_ora_2213.trc /home/oracle/control.sql

control.sql 파일을 편집합니다.
SQL> ed  /home/oracle/control.sql
[2. RESETLOGS case]를 검색하여 그 아래 내용을 활용할 것입니다.
/2. RESETLOGS case
dgg를 타이핑 하여 위의 내용은 모두 삭제합니다.(vi명령어)
orcl 을 clone로 치환합니다. 대소문자 따로 두번실행합니다.
:%s/orcl/clone/g
:%s/ORCL/CLONE/g
그 외에 적절하게 변경합니다. 다음은 최소한의 수정을 한 control file입니다.


CREATE CONTROLFILE SET DATABASE "CLONE" RESETLOGS  ARCHIVELOG


    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/clone/redo01.log'  SIZE 50M,
  GROUP 2 '/u01/app/oracle/oradata/clone/redo02.log'  SIZE 50M,
  GROUP 3 '/u01/app/oracle/oradata/clone/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/clone/system01.dbf',
  '/u01/app/oracle/oradata/clone/undotbs01.dbf',
  '/u01/app/oracle/oradata/clone/sysaux01.dbf',
  '/u01/app/oracle/oradata/clone/users01.dbf',
  '/u01/app/oracle/oradata/clone/example01.dbf',
  '/u01/app/oracle/oradata/clone/staging01.dbf',
  '/u01/app/oracle/oradata/clone/resum_ts.dbf',
  '/u01/app/oracle/oradata/clone/alter1.dbf'
CHARACTER SET WE8ISO8859P1
;

3. 새로운 데이터베이스에 필요한 디렉토리 생성
SQL> host mkdir -p $ORACLE_BASE/admin/clone/bdump
SQL> host mkdir -p $ORACLE_BASE/admin/clone/cdump
SQL> host mkdir -p $ORACLE_BASE/admin/clone/udump
SQL> host mkdir -p $ORACLE_BASE/admin/clone/adump
SQL> host mkdir -p $ORACLE_BASE/oradata/clone

4. datafile 복사
데이터파일을 복사하기 위해 원본 데이터베이스를 종료합니다.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

데이터파일을 복사합니다.
SQL> host cp $ORACLE_BASE/oradata/orcl/*.dbf $ORACLE_BASE/oradata/clone/

5. clone DB로 접속후 control을 생성하기 위해 nomount로 시작합니다.

OS$ export ORACLE_SID=clone
OS$ sqlplus / as sysdba

SQL> startup nomount
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size            1218992 bytes
Variable Size           92276304 bytes
Database Buffers      188743680 bytes
Redo Buffers            2973696 bytes

6. control file 생성
위 에서 편집하여 만들어준 control을 실행합니다.
SQL> @control

Control file created.

archive log file이 없지만 recover한번 해보겠습니다.
SQL> recover database until cancel using backup controlfile;
ORA-00279: change 863069 generated at 10/28/2009 23:07:20 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/CLONE/archivelog/2009_10_28/o1_mf_1_11_%u_.arc
ORA-00280: change 863069 for thread 1 is in sequence #11


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.

7. 데이터베이스를 오픈합니다.
이제 불완전복구 방식으로 데이터베이스를 오픈합니다.
alter database open resetlogs;

Database altered.

데이터베이스 인스턴스 상태 조회
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

데이터베이스가 정상적으로 복사되어 오픈되었습니다.
반응형
Posted by [PineTree]