ORACLE/ADMIN2024. 1. 25. 15:11
반응형


1) Using ASMCMD Utility ( Latest method )
2) Using RMAN ( alternative method )
3) Using DBMS package ( old method )

 

첫 번째

> Using ASMCMD Utility

 select file_id,file_name,bytes/1024/1024 from dba_data_files;
   FILE_ID FILE_NAME                                          BYTES/1024/1024
---------- -------------------------------------------------- ---------------
         1 +DATA/ARACDB/DATAFILE/system.265.1136924533                    810
         3 +DATA/ARACDB/DATAFILE/sysaux.266.1136924577                    530
         5 +DATA/ARACDB/DATAFILE/undotbs2.273.1136924729                   25
         7 +DATA/ARACDB/DATAFILE/users.268.1136924605                       5
         4 +DATA/ARACDB/DATAFILE/undotbs1.267.1136924603                   70

 

[+ASM1:/home/grid]> asmcmd
ls
ASMCMD> CRS/
DATA/
FRA/
MGMT/
ASMCMD> cd data
ASMCMD> ls
aracdb/
ASMCMD> cd a*
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
PASSWORD/
TEMPFILE/
ASMCMD> cd datafile
ASMCMD> ls
SYSAUX.258.1136915229
SYSAUX.266.1136924577
SYSTEM.257.1136915185
SYSTEM.265.1136924533
UNDOTBS1.259.1136915255
UNDOTBS1.267.1136924603
UNDOTBS2.273.1136924729
USERS.260.1136915255
USERS.268.1136924605

-- 복사

ASMCMD> cp SYSAUX.266.1136924577 /home/grid/sysaux01.dbf
copying +data/aracdb/datafile/SYSAUX.266.1136924577 -> /home/grid/sysaux01.dbf

 

두 번째

> Using RMAN

[aracdb1:/home/oracle]> rman target /
Recovery Manager: Release 12.2.0.1.0 - Production on Thu Jan 25 11:12:10 2024
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ARACDB (DBID=2943394426)
RMAN> copy datafile 1 to '/home/oracle/system01.dbf'             ;
Starting backup at 24/01/25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=277 instance=aracdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=+DATA/ARACDB/DATAFILE/system.265.1136924533
output file name=/home/oracle/system01.dbf tag=TAG20240125T111517 RECID=1 STAMP=1159182926
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:16
Finished backup at 24/01/25

Starting Control File and SPFILE Autobackup at 24/01/25
piece handle=+FRA/ARACDB/AUTOBACKUP/2024_01_25/s_1159182933.287.1159182935 comment=NONE
Finished Control File and SPFILE Autobackup at 24/01/25

 

세 번째

> Using DBMS package

SQL> desc dbms_file_transfer
PROCEDURE COPY_FILE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
 SOURCE_FILE_NAME               VARCHAR2                IN
 DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
 DESTINATION_FILE_NAME          VARCHAR2                IN
PROCEDURE COPY_FILE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
 SOURCE_FILE_NAME               VARCHAR2                IN
 DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
 DESTINATION_FILE_NAME          VARCHAR2                IN
 CREATED_FILE_NAME              VARCHAR2                OUT
 DESTINATION_FILE_TAG           VARCHAR2                IN     DEFAULT
PROCEDURE GET_FILE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
 SOURCE_FILE_NAME               VARCHAR2                IN
 SOURCE_DATABASE                VARCHAR2                IN
 DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
 DESTINATION_FILE_NAME          VARCHAR2                IN
PROCEDURE PUT_FILE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SOURCE_DIRECTORY_OBJECT        VARCHAR2                IN
 SOURCE_FILE_NAME               VARCHAR2                IN
 DESTINATION_DIRECTORY_OBJECT   VARCHAR2                IN
 DESTINATION_FILE_NAME          VARCHAR2                IN
 DESTINATION_DATABASE           VARCHAR2                IN

SQL> create directory SOURCE_DIR as '+DATA/aracdb/datafile';
Directory created.
SQL> create directory TARGET_DIR as '/oradata/';
Directory created.
SQL> BEGIN
  2  dbms_file_transfer.copy_file(source_directory_object =>
  3  'SOURCE_DIR', source_file_name => 'SYSAUX.266.1136924577',
  4  destination_directory_object => 'TARGET_DIR',
  5  destination_file_name => 'sysaux001.dbf');
  6  END;  
  7  /
PL/SQL procedure successfully completed.

 

[oracle@arac1 ~]$ cd /oradata
[oracle@arac1 oradata]$ ls
sysaux001.dbf
[oracle@arac1 oradata]$ ls -al
합계 542732
drwxr-xr-x.  2 oracle dba             26  1월 25 11:36 .
dr-xr-xr-x. 20 root   root          4096  1월 25 11:27 ..
-rw-r-----.  1 oracle asmadmin 555753472  1월 25 11:36 sysaux001.dbf

 

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

 

 ASM 에서 filesystem으로 복사 하는 3가지 방법이 있습니다.

위 3가지 방법 중에서는 1,2번(asmcmd cp,rman copy) 방법이 제일 간단히 할 수 있겠습니다.

감사합니다.

반응형
Posted by [PineTree]
ORACLE/Backup & Recovery2023. 5. 23. 17:44
반응형

RAC TO SINGLE 복제 목적지 에서 실행
[oracle@aracdb aracdb]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.219.201 ora12c

### Public
192.168.219.111  arac1
192.168.219.113  arac2
### Private
192.168.0.111  arac1-priv
192.168.0.112  arac2-priv
### Virtual
192.168.219.112  arac1-vip
192.168.219.114  arac2-vip
### DNS
192.168.219.115  arac-scan


source 서버에서 pwd파일 목적지 서버로 카피
scp $ORACLE_HOME/dbs/orapwaracdb1 ora12c:$ORACLE_HOME/dbs/orapwaracdb
-- 패스워드 파일이 없을 시에 실행 후 목적지 서버로 옮긴다
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle force=y format=12

파라미터 설정

*.audit_file_dest='/u01/app/oracle/admin/aracdb/adump'
*.audit_trail='db'
#*.cluster_database=true
*.compatible='12.2.0'
*.control_files='/oradata/aracdb/controlfile/control01.ctl','/oradata/aracdb/controlfile/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/oradata/aracdb'
*.db_name='aracdb'
*.db_recovery_file_dest='/oradata/aracdb'
*.db_recovery_file_dest_size=10g
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=aracdbXDB)'
#family:dw_helper.instance_mode='read-only'
*.log_archive_format='%t_%s_%r.dbf'
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.pga_aggregate_target=1000m
*.processes=320
*.remote_login_passwordfile='exclusive'
*.sga_target=2998m
*.log_file_name_convert='+DATA','/oradata','+FRA','/oradata'
*.db_file_name_convert='+DATA','/oradata','+FRA','/oradata'

오라클 유저로 디렉토리 생성
/oradata/aracdb
/oradata/aracdb/onlinelog        <<== 리두 로그 경로 안만들었더니 에러 발생
/u01/app/oracle/admin/aracdb/adump
/u01/app/oracle/diag/rdbms/aracdb/aracdb/trace
/u01/app/oracle/diag/rdbms/aracdb/aracdb/cdump

-- 목적지 복제용 리스너 구성

LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = ora12c)(PORT = 1521))
     )
   )

SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
       (SID_NAME = aracdb)
       (ORACLE_HOME = /u01/app/oracle/product/12C/db_1)
     )
   )

목적지 NO MOUNT 모드 기동

SQL*Plus: Release 12.2.0.1.0 Production on Tue May 23 17:18:57 2023

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area 3154116608 bytes
Fixed Size                  8625656 bytes
Variable Size             788529672 bytes
Database Buffers         2348810240 bytes
Redo Buffers                8151040 bytes
SQL> 


목적지
## tnsnames.ora
ARACDB1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.219.112)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = aracdb)
    )
  )

aracdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora12c)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = aracdb)
    )
  )
-- 리스너 기동

[oracle@aracdb admin]$ lsnrctl start
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 25-JAN-2024 16:31:24
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
Starting /u01/app/oracle/product/12C/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12C/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora12c/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora12c)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                25-JAN-2024 16:31:24
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12C/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ora12c/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora12c)(PORT=1521)))
Services Summary...
Service "aracdb" has 1 instance(s).
  Instance "aracdb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

 

-- 목적지에서 rman  접속 후 복제 명령어 실행
[oracle@aracdb admin]$ rman target sys/oracle@aracdb1 auxiliary sys/oracle@aracdb

Recovery Manager: Release 12.2.0.1.0 - Production on Thu Jan 25 16:31:34 2024

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

connected to target database: ARACDB (DBID=2943394426)
connected to auxiliary database: ARACDB (not mounted)

RMAN> DUPLICATE DATABASE TO aracdb
2>   FROM ACTIVE DATABASE
3>   NOFILENAMECHECK;

Starting Duplicate Db at 24/01/25
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=261 device type=DISK
current log archived

contents of Memory Script:
{
   sql clone "create spfile from memory";
}
executing Memory Script

sql statement: create spfile from memory

contents of Memory Script:
{
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    3154116608 bytes

Fixed Size                     8625656 bytes
Variable Size                788529672 bytes
Database Buffers            2348810240 bytes
Redo Buffers                   8151040 bytes

contents of Memory Script:
{
   sql clone "alter system set  db_name = 
 ''ARACDB'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   sql clone "alter system set  db_unique_name = 
 ''aracdb'' comment=
 ''Modified by RMAN duplicate'' scope=spfile";
   shutdown clone immediate;
   startup clone force nomount
   restore clone from service  'aracdb1' primary controlfile;
   alter clone database mount;
}
executing Memory Script

sql statement: alter system set  db_name =  ''ARACDB'' comment= ''Modified by RMAN duplicate'' scope=spfile

sql statement: alter system set  db_unique_name =  ''aracdb'' comment= ''Modified by RMAN duplicate'' scope=spfile

Oracle instance shut down

Oracle instance started

Total System Global Area    3154116608 bytes

Fixed Size                     8625656 bytes
Variable Size                788529672 bytes
Database Buffers            2348810240 bytes
Redo Buffers                   8151040 bytes

Starting restore at 24/01/25
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=135 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
output file name=/oradata/aracdb/controlfile/control01.ctl
output file name=/oradata/aracdb/controlfile/control02.ctl
Finished restore at 24/01/25

database mounted

contents of Memory Script:
{
   set newname for datafile  1 to 
 "/oradata/aracdb/datafile/system.265.1136924533";
   set newname for datafile  3 to 
 "/oradata/aracdb/datafile/sysaux.266.1136924577";
   set newname for datafile  4 to 
 "/oradata/aracdb/datafile/undotbs1.267.1136924603";
   set newname for datafile  5 to 
 "/oradata/aracdb/datafile/undotbs2.273.1136924729";
   set newname for datafile  7 to 
 "/oradata/aracdb/datafile/users.268.1136924605";
   restore
   from  nonsparse   from service 
 'aracdb1'   clone database
   ;
   sql 'alter system archive log current';
}
executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 24/01/25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /oradata/aracdb/datafile/system.265.1136924533
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to /oradata/aracdb/datafile/sysaux.266.1136924577
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00004 to /oradata/aracdb/datafile/undotbs1.267.1136924603
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /oradata/aracdb/datafile/undotbs2.273.1136924729
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /oradata/aracdb/datafile/users.268.1136924605
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 24/01/25

sql statement: alter system archive log current
current log archived

contents of Memory Script:
{
   restore clone force from service  'aracdb1' 
           archivelog from scn  1728198;
   switch clone datafile all;
}
executing Memory Script

Starting restore at 24/01/25
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=23
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service aracdb1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=24
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 24/01/25

datafile 1 switched to datafile copy
input datafile copy RECID=10 STAMP=1159202130 file name=/oradata/aracdb/datafile/system.265.1136924533
datafile 3 switched to datafile copy
input datafile copy RECID=11 STAMP=1159202130 file name=/oradata/aracdb/datafile/sysaux.266.1136924577
datafile 4 switched to datafile copy
input datafile copy RECID=12 STAMP=1159202130 file name=/oradata/aracdb/datafile/undotbs1.267.1136924603
datafile 5 switched to datafile copy
input datafile copy RECID=13 STAMP=1159202130 file name=/oradata/aracdb/datafile/undotbs2.273.1136924729
datafile 7 switched to datafile copy
input datafile copy RECID=14 STAMP=1159202130 file name=/oradata/aracdb/datafile/users.268.1136924605

contents of Memory Script:
{
   set until scn  1728333;
   recover
   clone database
    delete archivelog
   ;
}
executing Memory Script

executing command: SET until clause

Starting recover at 24/01/25
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 23 is already on disk as file /oradata/aracdb/ARACDB/archivelog/2024_01_25/o1_mf_1_23_lv43szth_.arc
archived log for thread 1 with sequence 24 is already on disk as file /oradata/aracdb/ARACDB/archivelog/2024_01_25/o1_mf_1_24_lv43t18x_.arc
archived log file name=/oradata/aracdb/ARACDB/archivelog/2024_01_25/o1_mf_1_23_lv43szth_.arc thread=1 sequence=23
archived log file name=/oradata/aracdb/ARACDB/archivelog/2024_01_25/o1_mf_1_24_lv43t18x_.arc thread=1 sequence=24
media recovery complete, elapsed time: 00:00:01
Finished recover at 24/01/25
Oracle instance started

Total System Global Area    3154116608 bytes

Fixed Size                     8625656 bytes
Variable Size                788529672 bytes
Database Buffers            2348810240 bytes
Redo Buffers                   8151040 bytes

contents of Memory Script:
{
   sql clone "alter system set  db_name = 
 ''ARACDB'' comment=
 ''Reset to original value by RMAN'' scope=spfile";
   sql clone "alter system reset  db_unique_name scope=spfile";
}
executing Memory Script

sql statement: alter system set  db_name =  ''ARACDB'' comment= ''Reset to original value by RMAN'' scope=spfile

sql statement: alter system reset  db_unique_name scope=spfile
Oracle instance started

Total System Global Area    3154116608 bytes

Fixed Size                     8625656 bytes
Variable Size                788529672 bytes
Database Buffers            2348810240 bytes
Redo Buffers                   8151040 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ARACDB" RESETLOGS ARCHIVELOG 
  MAXLOGFILES    192
  MAXLOGMEMBERS      3
  MAXDATAFILES     1024
  MAXINSTANCES    32
  MAXLOGHISTORY      292
 LOGFILE
  GROUP   1 ( '/oradata/aracdb/onlinelog/group_1.260.1136924673', '/oradata/aracdb/onlinelog/group_1.270.1136924671' ) SIZE 200 M  REUSE,
  GROUP   2 ( '/oradata/aracdb/onlinelog/group_2.261.1136924673', '/oradata/aracdb/onlinelog/group_2.271.1136924671' ) SIZE 200 M  REUSE
 DATAFILE
  '/oradata/aracdb/datafile/system.265.1136924533'
 CHARACTER SET AL32UTF8

sql statement: ALTER DATABASE ADD LOGFILE 
  
  INSTANCE 'i2' 
  GROUP   3 ( '/oradata/aracdb/onlinelog/group_3.274.1136924835', '/oradata/aracdb/onlinelog/group_3.262.1136924835' ) SIZE 200 M  REUSE,
  GROUP   4 ( '/oradata/aracdb/onlinelog/group_4.275.1136924837', '/oradata/aracdb/onlinelog/group_4.263.1136924837' ) SIZE 200 M  REUSE

contents of Memory Script:
{
   set newname for tempfile  1 to 
 "/oradata/aracdb/tempfile/temp.272.1136924683";
   switch clone tempfile all;
   catalog clone datafilecopy  "/oradata/aracdb/datafile/sysaux.266.1136924577", 
 "/oradata/aracdb/datafile/undotbs1.267.1136924603", 
 "/oradata/aracdb/datafile/undotbs2.273.1136924729", 
 "/oradata/aracdb/datafile/users.268.1136924605";
   switch clone datafile all;
}
executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /oradata/aracdb/tempfile/temp.272.1136924683 in control file

cataloged datafile copy
datafile copy file name=/oradata/aracdb/datafile/sysaux.266.1136924577 RECID=1 STAMP=1159202165
cataloged datafile copy
datafile copy file name=/oradata/aracdb/datafile/undotbs1.267.1136924603 RECID=2 STAMP=1159202165
cataloged datafile copy
datafile copy file name=/oradata/aracdb/datafile/undotbs2.273.1136924729 RECID=3 STAMP=1159202165
cataloged datafile copy
datafile copy file name=/oradata/aracdb/datafile/users.268.1136924605 RECID=4 STAMP=1159202165

datafile 3 switched to datafile copy
input datafile copy RECID=1 STAMP=1159202165 file name=/oradata/aracdb/datafile/sysaux.266.1136924577
datafile 4 switched to datafile copy
input datafile copy RECID=2 STAMP=1159202165 file name=/oradata/aracdb/datafile/undotbs1.267.1136924603
datafile 5 switched to datafile copy
input datafile copy RECID=3 STAMP=1159202165 file name=/oradata/aracdb/datafile/undotbs2.273.1136924729
datafile 7 switched to datafile copy
input datafile copy RECID=4 STAMP=1159202165 file name=/oradata/aracdb/datafile/users.268.1136924605

contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Cannot remove created server parameter file
Finished Duplicate Db at 24/01/25

RMAN> 


접속 후 상태 확인

SQL*Plus: Release 12.2.0.1.0 Production on Thu Jan 25 16:37:44 2024

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
aracdb           OPEN

 

##################################################################################

채널 여러개 할당

복제 시에 채널 개수 만큼 패러럴 하게 복제

ex) 채널 2개 할당 

rman target sys/oracle@aracdb1 auxiliary sys/oracle@aracdb
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate auxiliary channel stby1 type disk;
allocate auxiliary channel stby2 type disk;
duplicate database to aracdb from active database nofilenamecheck;
}

반응형
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/Backup & Recovery2011. 8. 31. 14:48
반응형
 

Clone Database를 이용한 복구 (RMAN을 이용할 경우)

 

RMAN을 이용해서 Duplicate(clone) database를 생성할 수 있다.

오라클의 매뉴얼에 자세한 순서와 설명이 있다.

 


아래 영어 설명은 매뉴얼 내용을 일부 발췌한 것이다.

  • By default, the DUPLICATE command creates the duplicate database from the most recent backups
    of the target database and then performs recovery to the most recent consistent point contained
    in the archived redo logs.

  • You can duplicate a database as it stood at a past point in time in the current incarnation,
    by using a RUN block with a SET UNTIL command, or by including an UNTIL clause with the DUPLICATE command to cause RMAN to recover the duplicate database to a past point in time within the current incarnation.

(1) Archive 모드임을 확인한 뒤에 백업을 수행한다.

 

[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ sqlplus / as sysdba

SQL> startup force

SQL> archive log list


Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     0
Next log sequence to archive   1
Current log sequence           1

 

SQL> exit

 

[oracle@ora10gr2 ~]$ mkdir /u01/app/oracle/oradata/devdb_rman_backup
[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb

[oracle@ora10gr2 ~]$ rman target /

 

RMAN> backup database format='/u01/app/oracle/oradata/devdb_rman_backup/devdb_%d_%s_%p.bus';

RMAN> exit

 

(2) 복구 완료를 확인할 테이블 생성

 

[oracle@ora10gr2 ~]$ sqlplus / as sysdba

SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;

SQL> create table phil.t2 (col1 varchar2(20));
SQL> insert into  phil.t2 values ('Recovery done!');
SQL> commit;

 

SQL> alter system switch logfile;
SQL> alter system switch logfile;

 

SQL> -- 복구의 기준이 되는 시간이므로 잘 기억하도록 한다.

SQL> !date

 

  2009. 12. 21. (월) 23:43:47 KST

 

(3) 유저 실수로 테이블이 삭제되는 상황 연출

 

SQL> alter system switch logfile;
SQL> alter system switch logfile;

SQL> -- 장애 발생
SQL> drop table phil.t2 purge;
SQL> exit

 

(4) Clone Database를 이용한 복구 시작


Task 1: Create an Oracle Password File for the Auxiliary Instance

 

[oracle@ora10gr2 ~]$ cd
[oracle@ora10gr2 ~]$ cd $ORACLE_HOME/dbs
[oracle@ora10gr2 dbs]$ orapwd file=orapwdevdbaux password=oracle entries=5

 

 Task 2: Establish Oracle Net Connectivity to the Auxiliary Instance

 

[oracle@ora10gr2 dbs]$ cd $ORACLE_HOME/network/admin
[oracle@ora10gr2 admin]$ vi tnsnames.ora

 

devdbaux =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdbaux)
    )
  )

 

Task 3: Create an Initialization Parameter File for the Auxiliary Instance

 

[oracle@ora10gr2 admin]$ export ORACLE_SID=devdb
[oracle@ora10gr2 admin]$ sqlplus / as sysdba

SQL> create pfile='$ORACLE_HOME/dbs/initdevdbaux.ora' from spfile;

SQL> !mkdir /u01/app/oracle/oradata/devdbaux

SQL> !vi $ORACLE_HOME/dbs/initdevdbaux.ora

 

DB_NAME=devdbaux
CONTROL_FILES='/u01/app/oracle/oradata/devdbaux/control01.ctl'
DB_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
LOG_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
db_block_size=4096
sga_target=200m
pga_aggregate_target=60m

 

SQL> exit

 

Task 4: Start the Auxiliary Instance

 

[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force nomount
SQL> exit


Task 5: Mount or Open the Target Database

 

[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force
SQL> exit

 

Task 6: Make Sure You Have the Necessary Backups and Archived Redo Logs

 

Make sure backups all target datafiles are accessible on the duplicate host.
Archived redo logs required to recover the duplicate database to the desired point in time

must be accessible at the same path by the node where the duplicate database is to be created.

 

 Task 7: Allocate Auxiliary Channels if Automatic Channels Are Not Configured

 

[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
[oracle@ora10gr2 ~]$ export NLS_LANG=american
[oracle@ora10gr2 ~]$ rman TARGET sys/oracle@devdb AUXILIARY /

 

RMAN> run {
 ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
 DUPLICATE TARGET DATABASE TO devdbaux UNTIL TIME '2009/12/21 23:43:47';
}

 

Task 8 : 마무리

 

[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 dbs]$ sqlplus / as sysdba

SQL> select * from phil.t2;

 

COL1
--------------------
Recovery done!


SQL> !exp phil/phil file=t2.dmp tables=t2
SQL> exit

 

[oracle@ora10gr2 dbs]$ export ORACLE_SID=devdb
[oracle@ora10gr2 dbs]$ sqlplus phil/phil

SQL> select * from t2;

 

select * from t2
              *
ERROR at line 1:
ORA-00942: table or view does not exist

 

SQL> !imp phil/phil file=t2.dmp tables=t2
SQL> select * from t2;

 

COL1
--------------------
Recovery done!

 

 

____________________________________________________________________________________________________________________

 

참고1.


A duplicate database is a copy of a target database

that you can run independently for a variety of purposes.

 

For example, you can use it to:

 

  - Test backup and recovery procedures

  - Export data such as a table that was inadvertently dropped from the production database,

    and then import it back into the production database

 

참고2.

 

As part of the duplicating operation, RMAN automates the following steps:

 

 - Creates a control file for the duplicate database

 - Restores the target datafiles to the duplicate database and performs incomplete recovery

   by using all available incremental backups and archived redo logs

 - Shuts down and starts the auxiliary instance

 - Opens the duplicate database with the RESETLOGS option after incomplete recovery

    to create the online redo logs (except when running DUPLICATE ... FOR STANDBY,

    in which case RMAN does not open the database)

 - Generates a new, unique DBID for the duplicate database (except when you create a standby database

   with DUPLICATE ... FOR STANDBY, in which case RMAN does not create a unique DBID)

 

During duplication, RMAN must perform incomplete recovery because the online redo logs in the target are not backed up and cannot be applied to the duplicate database. The farthest that RMAN can go in recovery of the duplicate database is the most recent redo log archived by the target database.

반응형
Posted by [PineTree]
ORACLE/ADMIN2007. 7. 24. 02:30
반응형
Oracle 8 NEW : Recovery manager 란 ?

Oracle 8 은 새로운 backup와 recovery 방법인 Recovery manager 를 제공한다.
Recovery manager(이하 RMAN) 는 backup,restore,recover process를 관리하는
tool 이다. Oracle Enterprise Manager 를 통해 GUI mode 로 가능하고,
rman 이라는 command line interface 를 함께 제공한다.

특히, OS device control 기능이 보완 되었기 때문에, 현재 backup catalog 를
유지하고, 이 정보를 이용해 OS level 에서 file 을 auto-restore 해 주기
때문에, database recovery 전에 file 을 manual 하게 restore 할 필요가
없어졌다.

Incremental backup 을 제공하고, backup 이나 restore 중에 current block
detection 을 해 주며(v$backup_corruption, v$copy_corruption 또는 alert
log 에 report), Rman 작업시에 parallelization 을 제공하며, open database
backup 동안 특별한 redo 를 발생하지 않는다.


- 구조

Recovery
manager in OEM(oracle
enterprise ---> Database
manager) <--- (catalog)
or RMAN

/| |
| |/

DATABASE ---> OS
(target to backup) <--- Device


- 구성 요소 설명

1) recovery manager
Command 를 해석하고, backup, restore, recover 를 실행하기 위해 target
database 로 command 를 전달한다. recovery catalog 를 update 한다. 실행
과정을 조정, 모니터링 한다.

2) Target database
backup,restore,recovery action 이 수행될 데이타베이스

3) Recovery Catalog
Information 저장장소. 즉, target database 의 물리적 스키마, datafile 과
archivelog 의 backup sets 과 pieces, backup script 등을 포함하고 있음.
rman 작업시 recovery catalog 정보를 이용한다.

4) channel
allocation channel 은 target database 의 backup,restore,recover 에 대한
server process 초기화를 한다. 즉, 이 channel 은 disk 를 포함 기타 OS
device 를 지정하게 되며, 이 갯수에 따라 parallelization 의 degree 가 결정
된다.


- recovery catalog 를 사용할 것인지를 결정하기
catalog 없이 RMAN 을 사용할 때의 단점은 recovery catalog 의 overhead 가
없는 대신, Point-In-Time recovery 를 쉽게 할 수 없다. 또한, control file
손상시에 recovery 할 수 없고, stored script 를 사용할 수 없다.
(datafile 이 20개 이상일 경우에는 recovery catalog 사용을 권장한다.)


- Setup

가. Recovery catalog 생성

1. Backup(target) db 외의 별도의 db 생성 (8.0.3 이상)

2. catalog DB 에 분리된 tablespace 생성

create tablespace rcvcat datafile '/oracle/rcvcat/rcvcat01.dbf'
size 20 M;

3. catalog 의 owner 생성과 권한부여

create user rman identified by rman
temporary tablespace temp
default tablespace rcvcat;

grant dba,connect,resource,recovery_catalog_owner to rman;

4. catalog 저장에 필요한 object 생성

cd $ORACLE_HOME/rdbms/admin
sqlplus rman/rman
@catrman

나. Recovery manager 기동

1. recovery catalog DB 를 사용하는 경우

rman target \"system/manager\" rcvcat \"rman/rman@orabeta1\"

(orabeta1 은 catalog DB 로 접속하는 tnsname 입니다.
즉, sqlplus rman/rman@orabeta1 하면, catalog db 와 접속되어야 합니다.)

2. recovery catalog DB 를 사용하지 않는 경우
rman target system/manager@target nocatalog

위 경우 모두, target database 를 catalog 에 등록해야 한다.
RMAN> register database;

다. Backup 시작
- Backup 은 database 가 open 또는 close(close 후에는 반드시 mount
상태이어야 한다)
- Backup 의 단위
full database
tablespace
datafile
control file
archived logs
- Backup 의 예

--full database

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
backup full filesperset 2
(database format '/user7/ora8/backup.%n_%p') ;
release channel dev1;
release channel dev2;
}

-- tablespace

run {
allocate channel dev_1 type disk ;
backup incremental level 0
filesperset 1
(tablespace system channel dev_1 format '/vol312/net8%d_%u');
release channel dev_1;

}


-- datafile

run{
allocate channel dev1 type disk;
copy datafile "/vo3/orabeta6/backup/copy_tools.dbf"
to "/vo3/orabeta6/oradata/orabeta6/tools01.dbf"
tag "org_tools";
release channel dev1;
}


-- archived logs

create script beta_arch_full {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
backup full filesperset 10
(archivelog all delete input
format '/vo3/orabeta6/backup/beta_arch.%s_%p') ;
release channel dev1;
release channel dev2;
}

-- backup to tape

run {
allocate channel t1 type 'sbt_tape';
backup
format 'dbfull_sunday_s%s_t%t'
tag 'Sunday full backup'
(database);
}

라. Restore

- Backup 으로 부터 원래 위치로 복원

- Archive log file 은 manual 하게 restore 할 수도 있고, 필요하다면
recovery 시 자동으로 restore 된다.

restore (archivelog all| like <filename | <archivelog range>);

- restore 명령
database : restore (database);
tablespace : restore (tablespace <name>,...,<name>);
datafile : restore (datafile <name>,...,<name>);
control file : restore control file to location;

- recovery 시에 database 는 어떤 상태에 있어야 하는가 ?
1) control file restore - not mount
SVRMGRL> startup nomount

2) whole database, or system tablespace - not open
SVRMGRL> startup mount

3) tablespace or datafile - open but tablespace or datafile offline
SVRMGRL> alter tablespace user_data offline temporary;
SVRMGRL> alter database datafile '/oracle/file/user_data1.dbf' offline;


마, Recovery

- Recoervy 는 file restore 후의 과정이다.

1) Archive log mode : complete recovery, incomplete recovery 가 가능하다
2) No archive log mode : consistent whole database backup 으로 부터
restore 하는 것이 유일한 option 이다.

- whole database recovery 의 예

svrmgrl
connect internal
shutdown abort
startup mount
-------------------------------------------------------------------
rman target \"system/manager\" rcvcat \"rman/rman@orabeta1\"

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
restore database;
recover database;
release channel dev1;
release channel dev2;
}

or

run {
allocate channel dev1 type disk;
allocate channel dev2 type disk;
restore tablespace 'SYSTEM';
restore tablespace 'USERS';
recover tablespace 'SYSTEM';
recover tablespace 'USERS';
sql "alter database open ";
release channel dev1;
release channel dev2;
}

- datafile 하나가 사용할 수 없을 경우의 recovery
가정) full backup set 이 있을 경우

ORA-01157: cannot identify data file 3 - file not found
ORA-01110: data file 3: '/user7/ora8/oradata/ORA8/temp01.dbf'

SVRMGR> startup mount

rman target \"system/manager\" rcvcat \"rman/rman@orabeta1\"
RMAN> run {
allocate channel dev1 type disk;
restore database;
recover database;
release channel dev1;
};

laalaal~
반응형
Posted by [PineTree]