[오라클] 윈도우 기반 오라클 운영 DB 를 복사하여 개발 DB 를 구축 (DB 복사)
Database/Oracle2016. 8. 11. 15:32
# 오라클 운영 DB 를 복사하여 테스트 및 개발 DB 로 사용하고자 할 때 방법!!!!
리눅스 환경의 인스턴스 복사 관련은 자료가 좀 나오는데 윈도우는 찾을 수가 없어서 난감함.
그래서 다른 DB 서버에 덤프로 복구하고 SID 를 변경 하려고 해보았는데, 시간이 걸릴 것 같아서 포기.
다른 블로그 글 보니 SID 명을 변경하기 위해서 인스턴스를 삭제하고 변경할 SID 로 재설치 해서 SID 를 변경했다는 글을 써놔서 당황함;;;;
윈도우에서 리눅스 서버로 close backup 복구 했었던 방식 및 오라클 기술 문서를 바탕으로 테스트 진행함.
1. 기존 DB 에 접속하여 컨트롤 파일 생성하는 쿼리를 실행
SQL> alter database backup controlfile to trace as 'E:\CTL.sql';
<--- 아래 부터 시작 --->
CREATE CONTROLFILE REUSE DATABASE "기존DB명" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\기존DB명\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\ORACLE\ORADATA\기존DB명\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\ORACLE\ORADATA\기존DB명\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\기존DB명\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\기존DB명\SYSAUX01.DBF',
'E:\ORACLE\ORADATA\기존DB명\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\기존DB명\USERS01.DBF',
CHARACTER SET AL32UTF8
;
정상 실행되면 CTL.sql 파일이 해당 경로에 생성 됨
2. 해당 파일을 편집기로 열어서 내용 수정
[ 편집 필요 부분 ]
STARTUP NOMOUNT <-- 여기는 필요 없음
<--- 아래 부터 시작 --->
CREATE CONTROLFILE REUSE DATABASE "기존DB명" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\기존DB명\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\ORACLE\ORADATA\기존DB명\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\ORACLE\ORADATA\기존DB명\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\기존DB명\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\기존DB명\SYSAUX01.DBF',
'E:\ORACLE\ORADATA\기존DB명\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\기존DB명\USERS01.DBF',
CHARACTER SET AL32UTF8
;
<--- 여기까지 내용을 수정 --->
[ 변경 완료 ]
CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\TEST\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\ORACLE\ORADATA\TEST\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\ORACLE\ORADATA\TEST\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\TESt\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\TEST\SYSAUX01.DBF',
'E:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\TEST\USERS01.DBF',
CHARACTER SET AL32UTF8
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\TEST\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\ORACLE\ORADATA\TEST\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\ORACLE\ORADATA\TEST\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\TESt\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\TEST\SYSAUX01.DBF',
'E:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\TEST\USERS01.DBF',
CHARACTER SET AL32UTF8
;
3. 변경 된 내용만을 CTL.ora 문서로 저장
E:\CTL.ora
4. 기존 DB 의 init.ora 파일을 확인하여 신규 DB 명으로 복사
spfile 이 있는 경로에 INIT기존DB.ora 파일이 있음 (내 서버의 경우)
그러면 spfile 이 어디에 있는지 확인을 해야 함
SQL> show parameter spfile;
출력되는 경로 확인되면 해당 경로로 이동하여 파일 복사
INIT기존DB.ora 를 복사하여 INITTEST.ora 로 생성
생성 된 INITTEST.ora 를 편집기로 수정
[ 변경 된 내용 ]
TEST.__db_cache_size=671088640
TEST.__java_pool_size=33554432
TEST.__large_pool_size=16777216
TEST.__oracle_base='d:\oracle'#ORACLE_BASE set from environment
TEST.__pga_aggregate_target=1073741824
TEST.__sga_target=2147483648
TEST.__shared_io_pool_size=0
TEST.__shared_pool_size=1375731712
TEST.__streams_pool_size=33554432
*._optimizer_push_pred_cost_based=TRUE
*.audit_file_dest='d:\oracle\admin\TEST\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\ORACLE\ORADATA\TEST\control01.ctl','d:\oracle\flash_recovery_area\TEST\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TEST'
*.db_recovery_file_dest='d:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest='d:\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTXDB)'
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=500
*.pga_aggregate_target=1073741824
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sec_case_sensitive_logon=FALSE
*.sessions=555
*.sga_target=2147483648
TEST.__java_pool_size=33554432
TEST.__large_pool_size=16777216
TEST.__oracle_base='d:\oracle'#ORACLE_BASE set from environment
TEST.__pga_aggregate_target=1073741824
TEST.__sga_target=2147483648
TEST.__shared_io_pool_size=0
TEST.__shared_pool_size=1375731712
TEST.__streams_pool_size=33554432
*._optimizer_push_pred_cost_based=TRUE
*.audit_file_dest='d:\oracle\admin\TEST\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='E:\ORACLE\ORADATA\TEST\control01.ctl','d:\oracle\flash_recovery_area\TEST\control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='TEST'
*.db_recovery_file_dest='d:\oracle\flash_recovery_area'
*.db_recovery_file_dest_size=4102029312
*.diagnostic_dest='d:\oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTXDB)'
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=500
*.pga_aggregate_target=1073741824
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sec_case_sensitive_logon=FALSE
*.sessions=555
*.sga_target=2147483648
*.undo_tablespace='UNDOTBS1'
5. D:\oracle\admin\기존DB 를 복사하여 D:\oracle\admin\TEST 를 생성한다. (하위 폴더 포함)
4번에서 INITTEST.ora 를 생성하긴 하였지만, 아래에서 진행되는 ORADIM을 이용한 인스턴스 생성시 pfile 을 지정한 경로에 맞춰야 할 수도 있으므로 기존 DB 와 동일하게 설정을 진행함
D:\oracle\admin\TEST\pfile 에 등록되어 있는 init.ora.~~~ 를 수정
기존DB명 으로 되어 있는 부분 수정 및 파일 경로 수정하고 init.ora 로 저장
dispatchers="(PROTOCOL=TCP) (SERVICE=TESTXDB)"
db_name=TEST
audit_file_dest=d:\oracle\admin\TEST\adump
control_files=("E:\ORACLE\ORADATA\TEST\control01.ctl", "d:\oracle\flash_recovery_area\TEST\control02.ctl")
6. 기존DB 에 접속하여 인스턴스를 중지하고 해당 인스턴스의 데이터를 신규 DB 가 저장 될 경로에 복사한다.
SQL> shutdown immediate
E:\ORACLE\ORADATA\기존DB명 폴더에 등록되어 있는 모든 파일들을
E:\ORACLE\ORADATA\TEST 폴더에 복사
및
D:\oracle\flash_recovery_area\TEST\ 폴더 생성
[ 여기서 Control File 은 복사를 하지 않는다. 왜냐하면 아래에서 진행되는 작업을 통해 컨트롤 파일들을 새로 생성 할 것이기 때문임. ]
컨트롤 파일이 위치하는 경로 확인하고 해당 파일들은 복사 하지 않음
SQL> select name from v$controlfile;
신규DB 의 컨트롤 파일 경로에 해당 파일들이 존재할 경우 컨트롤 파일 재생성시에 오류 발생
복사가 완료 되었으면 기존 DB 의 인스턴스 시작
7. ORADIM 을 이용하여 신규 인스턴스를 생성
C:\> ORADIM -NEW -SID 신규DB -INTPWD 패스워드 -STARTMODE AUTO -PFILE D:\oracle\admin\신규DB\pfile\init.ora
C:\> ORADIM -NEW -SID TEST -INTPWD manager -STARTMODE AUTO -PFILE D:\oracle\admin\TEST\pfile\init.ora
명령어가 잘 실행되면 서비스에 신규 DB 인스턴스 생성 된 것이 확인 됨
8. 생성 된 신규 DB 에 접속하여 인스턴스 종료 후 마운트해제하여 시작 진행
C:\> set oracle_sid=TEST
C:\> sqlplus /nolog
SQL> conn sys /as sysdba
SQL> shutdown immediate
SQL> startup nomount
9. 컨트롤파일 재생성을 위해 3번에서 만들어 두었던 CTL.ora 를 실행
SQL> @E:\CTL.ora
컨트롤 파일이 정상 생성 되었음은 해당 경로에 가서 확인 가능
E:\ORACLE\ORADATA\TEST\CONTROL01.CTL
D:\oracle\flash_recovery_area\TEST\CONTROL02.CTL
10. 인스턴스를 정상 오픈 시킨 후 쿼리문 이용하여 기존DB 와 동일한 데이터를 갖고 있는지 확인
SQL> alter database open resetlogs;
SQL> SELECT * FROM DBA_USERS;
기존 DB 와 동일한 데이터를 가지는 것이 확인 되었으므로 테스트 종료함
'Database > Oracle' 카테고리의 다른 글
[오라클] Oracle 11g R2 x64 클라이언트 설치 (0) | 2016.12.08 |
---|---|
[오라클] 오라클 11g 제거 (윈도우 환경) (0) | 2016.08.12 |
[오라클] 오라클 11g 설치 (윈도우 환경) (0) | 2016.08.12 |
[오라클] 현재 접속 된 오라클 인스턴스 확인 (0) | 2016.08.02 |
[오라클] DB 인스턴스 구성 파일 경로 확인 (0) | 2016.08.02 |