오라클 10g 에서 기존에 올라온 DB 복제 하는 방법입니다..
핫백업 받아 둔것과 트레이스로 컨트롤 파일을 떠서
기존 데이타 파일 복사와 컨트롤 파일 재생성으로 디비 복제 하는 방법입니다.
테스트 완료 된 내용입니다. 참고하시어 업무에 도움 되시길 바래요
+ Clone DB Creation with Hot Backup on HP-UX oracle10g +
1. 기존 DB가 noarchive mode 라면 archive log mode로 변경 작업
1.0 init$ORACLE_SID.ora 파일에
log_archive_dest='/oradata1/$ORACLE_SID/arch'
log_archive_format='arch_%t_%s_%r.arc'
#log_archive_start=TRUE --
under 9i 추가
1.1 col host_name for a20
col
instance_name for a20
col status for a10
select host_name,instance_name, status from
v$instance;
>> status = open 확인
archive log
list;
>> archive log status 확인
or
select db_unique_name, log_mode from v$database;
DB_UNIQUE_NAME
LOG_MODE
----------------------- ----------------------
확인
ORA102
NOARCHIVELOG
1.2 SQL> shutdown immediate >> DB 내려간 상태
확인후
SQL> startup mount 로 디비 올림
select
host_name,instance_name, status from v$instance;
>> status
= mounted 확인
아카이브 모드로 변경
alter database archivelog;
archive log list; 로 아카이브
모드로 변경되었는지 확인후
alter database open; 으로 디비 올림.
----------------------------- or
---------------------------------------
만약 접속된 세션이 없다면 ,
Database Open 상태에서
select host_name,instance_name,
status from v$instance;
>> status = open 확인
SQL> alter database close immediate; 로 내린다.
select
host_name,instance_name, status from v$instance;
>> status
= mounted 확인
아카이브 모드로 변경
alter database archivelog;
archive log list; 로 아카이브 모드로 변경되었는지 확인 후
shutdown
immediate
startup
----------------------------------------------------------------------------
1.3
select host_name,instance_name, status from v$instance;
>> status = open 확인
archive log list;
>> archive log mode 확인.
2. 간단한 test용 user를 만들어서 간단한 table 및 data를 넣는다.
2.1
test user 생성
create user test identified by test
default
tablespace users
temporary tablespace temp;
2.2 권한 부여
SQL> grant resource, connect to test; 로 권한 부여
2.3 table &
data 생성
SQL> conn test/test 로 접속
SQL> create table
test_table (
num number
);
SQL> begin
for i
in 1.. 10000 loop
insert into test_table (num) values (i);
end loop;
commit;
end;
/
SQL> select count(*) from test_table;
COUNT(*)
----------
10000
>> 복제된 DB에서 위 데이타 확인을 위한 사항.
3. Log swich를 일으킨다.
SQL> alter system switch logfile;
SQL> /
SQL>
/
4. Online backup을 받아 놓는다.
-- Controlfile
Backup
ALTER DATABASE BACKUP CONTROLFILE TO '/oradata1/CLONE/control.bak' REUSE
alter session set tracefile_identifier='ORA102_CONTROLFILE_BACKUP'
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
$] cd $ORACLE_HOME/admin/$ORACLE_SID/udump
$] ls
*ORA102_CONTROLFILE_*
...
ora102_ora_6948_ORA102_CONTROLFILE_BACKUP.trc
$] vi ora102_ora_6948_ORA102_CONTROLFILE_BACKUP.trc
하여 내용을 확인하자. (내용인 즉슨 create controlfile... 문이 있어야 된다.)
-- 조회 결과문의 헤더,피드백,시간,조회시간,번복 값 끄기 >> 조회 결과 값만 출력되게 하기위해..
set
head off
set feedback off
set time off
set timing off
set echo
off
-- 테이블 스페이스 비긴 백업 구문 조회로 명령어 얻기
select 'alter tablespace
'||tablespace_name||' begin backup;' from dba_tablespaces
where
status='ONLINE' and contents <> 'TEMPORARY'
alter tablespace SYSTEM begin backup;
alter tablespace UNDOTBS1 begin
backup;
alter tablespace SYSAUX begin backup;
alter tablespace USERS
begin backup;
alter tablespace YBJ_TBS begin backup;
alter tablespace
JYS_TEST begin backup;
alter tablespace HKH_TEST begin backup;
alter
tablespace TEST_JYS begin backup;
또는
alter database begin backup; 10g 부터..
-- 복사할 데이타 파일 조회로 명령어 얻기
select '!cp '||name||'
/oradata1/ORA102_backup/' from v$datafile;
!cp /oradata1/ORA102/system01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/undotbs01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/sysaux01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/users01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/ybj01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/ybj02.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/ybj03.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/ybj04.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/jys01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/jys02.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/jys03.dbf /oradata1/ORA102_backup/
!cp
/oradata1/hkh_test01.dbf /oradata1/ORA102_backup/
!cp
/oradata1/ORA102/test_jys.dbf /oradata1/ORA102_backup/
-- 테이블 스페이스 엔드 백업 구문 조회로 명령어 얻기
select 'alter tablespace
'||tablespace_name||' end backup;' from dba_tablespaces
where
status='ONLINE' and contents<>'TEMPORARY'
alter tablespace SYSTEM end backup;
alter tablespace UNDOTBS1 end
backup;
alter tablespace SYSAUX end backup;
alter tablespace USERS end
backup;
alter tablespace YBJ_TBS end backup;
alter tablespace JYS_TEST
end backup;
alter tablespace HKH_TEST end backup;
alter tablespace
TEST_JYS end backup;
또는
alter database end backup; 10g 부터..
5. Log swich 5번을 일으킨다.
SQL> alter system switch logfile;
SQL> /
SQL> /
SQL>
/
SQL> /
6. Backup 받은 파일과 controlfile의 trace를 이용하여 SID가 CLONE인 clone db를 하나 더
생성한다.
(datafile 위치는 임의 지정)
6.1. Backup 받은 데이타 파일들과 초기화파일을 CLONE DB에서 데이타 파일과 초기화 파일을 지정할 위치에 카피해서
넣어둔다.
$] cp /oradata1/ORA102_backup/*.dbf /oradata1/CLONE/
$] cp $ORACLE_HOME/dbs/initORA102.ora cp /oradata1/CLONE/init.ora
6.2.
CLONE DB 의 덤프 디렉토리를 생성한다.
$] cd $ORACLE_BASE/admin
$] mkdir CLONE
$]
cd CLONE
$] mkdir adump bdump cdump udump
6.3. CLONE DB 생성
시작
6.3.0 /etc/oratab 파일에 다음과 같이 추가하자.(기존 DB SID 아래 붙이면 된다.)
$] vi /etc/oratab
....
CLONE:/oracle10/app/oracle/product/102:N # ORACLE_SID:$ORACLE_HOME:<system boot 시 자동시작 여부 Y/N>
....
:wq
6.3.1
CLONE DB 용 orapwd 생성
$] cd $ORACLE_HOME/dbs
$] orapwd file=orapwCLONE
password=oracle entries=5
6.3.2 백업해둔 init.ora 파일을 CLONE DB에 맞게 경로 수정
및 db_name 바꺼주기.
$] vi /oradata1/CLONE/init.ora
-- 확인 사항 --
audit_file_dest
background_dump_dest
core_dump_dest
user_dump_dest
control_files
log_archive_dest
<SGA 영역들의 이름 앞에 붙는 SID : 있을경우만>
6.3.3
sqlplus 접속 후 sys 접속
$] sqlplus /nolog
SQL> conn sys as
sysdba
password : oracle
Connected.
6.3.4 백업해둔 init.ora 파일로 DB
nomount : 컨트롤 파일 재생성을 위해
SQL> startup nomount
pfile='/oradata1/CLONE/init.ora'
6.3.5 controlfile을 백업한 trace 파일을 열어 resetlogs 에 해당하는 부분의 sql 구문을
복사한다.
6.3.6 복사한 후 실행하 sql 문 생성.
6.3.7 복사한 구문 붙여넣기 한 후 데이타 파일 의 디비
이름을 클론db 이름으로 갱신을 위해
set DATABASE "CLONE" 을 써준다. 노아카이브로
올리기.(NOARCHIVELOG 옵션을 붙여준다.)
$] vi ctl.sql
CREATE CONTROLFILE SET DATABASE "CLONE" RESETLOGS
NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 2920
LOGFILE
GROUP 1
'/oradata1/ORA102/redo01.log' SIZE 50M,
GROUP 2
'/oradata1/ORA102/redo02.log' SIZE 50M,
GROUP 3
'/oradata1/ORA102/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oradata1/ORA102/system01.dbf',
'/oradata1/ORA102/undotbs01.dbf',
'/oradata1/ORA102/sysaux01.dbf',
'/oradata1/ORA102/users01.dbf',
'/oradata1/ORA102/ybj01.dbf',
'/oradata1/ORA102/ybj02.dbf',
'/oradata1/ORA102/ybj03.dbf',
'/oradata1/ORA102/ybj04.dbf',
'/oradata1/ORA102/jys01.dbf',
'/oradata1/ORA102/jys02.dbf',
'/oradata1/ORA102/jys03.dbf',
'/oradata1/hkh_test01.dbf',
'/oradata1/ORA102/test_jys.dbf'
CHARACTER
SET KO16KSC5601
;
:wq
SQL> @ctl.sql
6.3.8 아카이브 로그
복구 < 아카이브가 모두 있을 시 >
SQL> RECOVER DATABASE USING BACKUP
CONTROLFILE;
6.3.9 불완전 복구 < 아카이브가 부족한 부분이 있을 시 >
SQL>
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
6.3.10
Resetlogs 옵션으로 데이터베이스 OPEN
SQL> alter database open resetlogs;
Database altered.
SQL> select host_name,instance_name, status from v$instance; 로 디비 상태 확인.
6.3.11 Temp 는 가져오지 않았기 때문에 따로 생성 해준 후 디폴트로 설정.
SQL> create temporary
tablespace temp
Tempfile ‘/oradata1/CLONE/temp01.d b f’ size
100M;
SQL> select name,bytes,status from
v$tempfile;
NAME
BYTES STATUS
---------------------------------- -------------
--------------
/oradata1/CLONE/temp01.dbf 104857600
ONLINE
SQL> alter database default temporary tablespace temp;
Set linesize 200
Col property_name for a30
Col property_value for
a15
Col description for a40
SQL> select * from
database_properties
Where property_name like
‘%TEMP%’;
PROPERTY_NAME
PROPERTY_VALUE
DESCRIPTION
--------------------------------- ----------------------
----------------------------------------------
DEFAULT_TEMP_TABLESPACE
TEMP01 Name of default temporary tablespace
7. Clone db가 Noarchive log mode로 되었는지 확인
SQL>
archive log list;
8. DB 정상 open 확인 후 2번에서 만든 test용 table의 data를 확인한다.
SQL> conn test/test
Connected.
SQL> select * from tab;
SQL> select count(*) from
test_table;
COUNT(*)
----------
10000
9. 리스너를 생성한다. Port는 1527로 사용한다.
$]cd $TNS_ADMIN or cd
$ORACLE_HOME/network/admin
$]vi listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME =
/oracle10/app/oracle/product/102)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hp_host_name)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = hp_host_name)(PORT = 1527))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
:wq
다음과 같이 차례대로 실행 한다.
$] lsnrctl
Lsnrctl > stop -> start ->
status
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=inno-hp)(PORT=1521)))
STATUS of the
LISTENER
------------------------
Alias
LISTENER
Version TNSLSNR for HPUX: Version 10.2.0.4.0 -
Production
Start Date 19-JAN-2009
19:59:50
Uptime 0 days 0 hr. 6 min. 2 sec
Trace
Level off
Security ON: Local OS
Authentication
SNMP OFF
Listener Parameter File
/oracle10/app/oracle/product/102/network/admin/listener.ora
Listener Log
File
/oracle10/app/oracle/product/102/network/log/listener.log
Listening Endpoints
Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=inno-hp.innolime.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=inno-hp.innolime.com)(PORT=1527)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services
Summary...
Service "CLONE" has 1 instance(s).
Instance "CLONE", status
READY, has 1 handler(s) for this service...
Service "CLONE_XPT" has 1
instance(s).
Instance "CLONE", status READY, has 1 handler(s) for this
service...
Service "ORA102" has 1 instance(s).
Instance "ORA102", status
READY, has 1 handler(s) for this service...
Service "ORA102_XPT" has 1
instance(s).
Instance "ORA102", status READY, has 1 handler(s) for this
service...
Service "PLSExtProc" has 1 instance(s).
Instance
"PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The
command completed successfully
10. 두 DB 간 test 를 해보자.
$]export ORACLE_SID=ORA102
$]sqlplus sys/oracle@CLONE as sysdba
SQL> show parameter
db_name
db_name : CLONE 으로 뜨면 성공
$]export ORACLE_SID=CLONE
$]sqlplus sys/oracle@ORA102 as sysdba
SQL> show parameter
db_name
db_name : ORA102 로 뜨면 성공
'ORACLE > Backup & Recovery' 카테고리의 다른 글
[oracle] Clon DB db 복제 (0) | 2010.03.22 |
---|---|
oracle SCN이 틀렸을 경우에 복구하는 방법인데요 (0) | 2010.03.19 |
파티션 테이블 복구 (0) | 2008.11.28 |
begin backup Mode 확인하기 (0) | 2008.06.19 |
[Unix] 초간단 오라클 백업 스크립트 DB_Oracle (0) | 2008.03.14 |