the task was to restore the backup from non ASM environment to another server with ASM, but under different SID.
Source database: DBSTREP
Target database: DBSTREP2
The control file create “create_ct_dbstrep2.sql” should look like:
Source database: DBSTREP
Target database: DBSTREP2
Step 1) Prepare the source database for cold backup
1
2
3
4
5
6
7
|
$ export
ORACLE_SID=DBSTREP
$ export
ORACLE_HOME=/oracle/product/11.1.0/db
$ sqlpplus /nolog
SQL> conn / as sysdba
SQL> shutdown
immediate
SQL> startup
mount
SQL> alter system
set large_pool_size=100M;
|
Step 2) Make a cold backup of the source database
1
2
3
4
5
6
7
8
9
10
11
12
|
$ rman target /
RMAN> run
{
allocate
channel c1 type disk format
'/st2_data04/backup/dbstrep/dbstrep_%p_%s_%T.bkp';
backup
database TAG 'DBSTREP';
backup
current controlfile TAG 'DBSTREP_CTRLFILE';
backup
spfile TAG 'DBSTREP_SPFILE';
release
channel c1;
}
exit;
|
Step 3) Create control file from the source database
1
2
3
|
$ sqlpplus /nolog
SQL> conn / as sysdba
SQL> alter database backup
controlfile to trace;
|
Then, change the
existing path to the datafiles to point to the ASM Diskgroup. Do not forget to
set the new name for the database ‘SET DATABASE “DBSTREP2″‘.
The control file create “create_ct_dbstrep2.sql” should look like:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
STARTUP NOMOUNT
CREATE CONTROLFILE
SET DATABASE "DBSTREP2" RESETLOGS
NOARCHIVELOG
MAXLOGFILES
16
MAXLOGMEMBERS
3
MAXDATAFILES
100
MAXINSTANCES
8
MAXLOGHISTORY
292
LOGFILE
GROUP 1
'+BSCSDATA00/DBSTREP2/redo01.log'
SIZE 50M,
GROUP 2
'+BSCSDATA00/DBSTREP2/redo02.log'
SIZE 50M,
GROUP 3
'+BSCSDATA00/DBSTREP2/redo03.log'
SIZE 50M
DATAFILE
'+BSCSDATA00/DBSTREP2/system01.dbf',
'+BSCSDATA00/DBSTREP2/sysaux01.dbf',
'+BSCSDATA00/DBSTREP2/undotbs01.dbf',
'+BSCSDATA00/DBSTREP2/users01.dbf',
'+BSCSDATA00/DBSTREP2/example01.dbf',
'+BSCSDATA00/DBSTREP2/t_rep01.dbf'
CHARACTER SET WE8ISO8859P9;
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE
TEMP ADD TEMPFILE '+BSCSDATA00/DBSTREP2/temp01.dbf'
SIZE 62914560
REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
EXIT;
|
Step 4) Create PFILE from SPFILE from the source database
“DBSTREP”
1
2
3
|
$ sqlpplus /nolog
SQL> conn / as sysdba
SQL> create pfile
from spfile;
|
Step 5) Generate and save the output of the script that generate
DBMS_BACKUP_RESTORE.
You will need it latter. Adjust script to your DBNAME/Datafile Path.
You will need it latter. Adjust script to your DBNAME/Datafile Path.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
SELECT 'SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber
=> '
||
file_id
||
', toname => '
||
'''+BSCSDATA00'
||
SUBSTR (file_name,
INSTR
(file_name, '/DBSTREP'),
LENGTH
(file_name)
)
||
''');' cmd
FROM dba_data_files
ORDER BY file_id
/
|
Output:
================================================================================================
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 1, toname => ‘+BSCSDATA00/DBSTREP/system01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 2, toname => ‘+BSCSDATA00/DBSTREP/sysaux01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 3, toname => ‘+BSCSDATA00/DBSTREP/undotbs01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 4, toname => ‘+BSCSDATA00/DBSTREP/users01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 5, toname => ‘+BSCSDATA00/DBSTREP/example01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 6, toname => ‘+BSCSDATA00/DBSTREP/t_rep01.dbf’);
================================================================================================
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 1, toname => ‘+BSCSDATA00/DBSTREP/system01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 2, toname => ‘+BSCSDATA00/DBSTREP/sysaux01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 3, toname => ‘+BSCSDATA00/DBSTREP/undotbs01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 4, toname => ‘+BSCSDATA00/DBSTREP/users01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 5, toname => ‘+BSCSDATA00/DBSTREP/example01.dbf’);
SYS.DBMS_BACKUP_RESTORE.restoredatafileto(dfnumber => 6, toname => ‘+BSCSDATA00/DBSTREP/t_rep01.dbf’);
Step 6) Copy the backup of source database “DBSTREP” to the
target server.
1
|
1@/st2_data04/backup/dbstrep$
scp *.bkp *.ora oraclert@destination:/CDR/rman_backup/dbstrep
|
step 7) Copy the PFILE of source database “DBSTREP” to the
target server in $ORACLE_HOME/dbs.
Modify it, so it points to the new sid “DBSTREP2″. Also create required folders on disk.
Modify it, so it points to the new sid “DBSTREP2″. Also create required folders on disk.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
*.audit_file_dest='/oraclert/admin/DBSTREP2/adump'
*.audit_trail='none'
*.compatible='11.1.0.0.0'
*.control_files='+BSCSDATA00/DBSTREP2/control01.ctl','+BSCSDATA00/DBSTREP2/control02.ctl','+BSCSDATA00/DBSTREP2/control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='DBSTREP2'
*.ddl_lock_timeout=10
*.diagnostic_dest='/oraclert'
*.dispatchers='(PROTOCOL=TCP)
(SERVICE=DBSTREPXDB)'
*.large_pool_size=0
*.local_listener='LISTENER'
*.open_cursors=300
*.pga_aggregate_target=209715200
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=1073741824
*.sga_target=1073741824
*.undo_tablespace='UNDOTBS1'
|
Step 8 – Connect to the target database “DBSTREP2″ and start it
in NOMOUNT.
After that run the script “restore_all.sql” which uses DBMS_BACKUP_RESTORE package.
After that run the script “restore_all.sql” which uses DBMS_BACKUP_RESTORE package.
1
2
3
4
5
6
|
$ export
ORACLE_SID=DBSTREP2
$ export
ORACLE_HOME=/oracle/product/11.1.0/db
$ sqlpplus /nolog
SQL> conn / as sysdba
SQL> startup
nomount
SQL>
@restore_all.sql
|
Contents of the
“restore_all.sql”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
DECLARE
v_handle
VARCHAR2 (500);
v_is_done
BOOLEAN := FALSE;
/*
The
t_input_files PL/SQL table entries must reflect the
backuppieces
comprising
the backupset
*/
TYPE
t_input_files IS TABLE OF
VARCHAR2 (1000)
INDEX BY BINARY_INTEGER;
/*
The
v_max_backup_pieces variable must reflect the number of backuppieces
*/
v_max_backup_pieces
NUMBER := 6;
v_input_files
t_input_files;
BEGIN
/*
If
the backup containt more one backupset (example: was taken with more
than 1 allocated channel),
then you
should add them in the array accordingly 2,3,4 ...
*/
v_input_files
(1) := '/CDR/rman_backup/dbstrep/dbstrep_1_5_20101210.bkp';
/*
v_input_files (2) := '/CDR/rman_backup/dbstrep/dbstrep_1_6_20101210.bkp'; */
/*
v_input_files (3) := '/CDR/rman_backup/dbstrep/dbstrep_1_7_20101210.bkp'; */
/*
Number of backup pieces in
a backupset */
v_max_backup_pieces
:= 6;
v_handle
:= SYS.DBMS_BACKUP_RESTORE.DEVICEALLOCATE;
/*
Start the restore conversation; From
file system to ASM
Diskgroup (+BSCSDATA00) */
SYS.DBMS_BACKUP_RESTORE.RESTORESETDATAFILE;
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 1,
toname
=> '+BSCSDATA00/DBSTREP2/system01.dbf'
);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 2,
toname
=> '+BSCSDATA00/DBSTREP2/sysaux01.dbf'
);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 3,
toname
=> '+BSCSDATA00/DBSTREP2/undotbs01.dbf'
);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 4,
toname
=> '+BSCSDATA00/DBSTREP2/users01.dbf'
);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 5,
toname
=> '+BSCSDATA00/DBSTREP2/example01.dbf'
);
SYS.DBMS_BACKUP_RESTORE.RESTOREDATAFILETO
(dfnumber
=> 6,
toname
=> '+BSCSDATA00/DBSTREP2/t_rep01.dbf'
);
FOR i
IN 1 .. v_max_backup_pieces
LOOP
DBMS_OUTPUT.PUT_LINE('Restoring
piece '|| to_char(i) || ' from backup file: '
|| v_input_files(i)
|| '...');
SYS.DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE
(done => v_is_done,
handle
=> v_input_files(i),
params
=> NULL
);
IF
v_is_done
THEN
GOTO all_done;
END IF;
END LOOP;
<<all_done>>
SYS.DBMS_BACKUP_RESTORE.devicedeallocate;
END;
/
|
Step 9) Check if the “restore_all.sql” has restored all
datafiles on the ASM diskgroup.
1
2
3
|
$ export
ORACLE_SID=+ASM
$ export
ORACLE_HOME=/oracle/product/11.1.0/asm
$ asmcmd
|
ASMCMD> cd
BSCSDATA00/DBSTREP2
ASMCMD> ls -al
Name
CONTROLFILE/
DATAFILE/
ONLINELOG/
TEMPFILE/
example01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1016.737392407
sysaux01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1014.737392407
system01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1015.737391459
t_rep01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1013.737392407
temp01.dbf => +BSCSDATA00/DBSTREP2/TEMPFILE/TEMP.1025.737393513
undotbs01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1017.737392407
users01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1018.737392407
ASMCMD> ls -al
Name
CONTROLFILE/
DATAFILE/
ONLINELOG/
TEMPFILE/
example01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1016.737392407
sysaux01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1014.737392407
system01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1015.737391459
t_rep01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1013.737392407
temp01.dbf => +BSCSDATA00/DBSTREP2/TEMPFILE/TEMP.1025.737393513
undotbs01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1017.737392407
users01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1018.737392407
Great, DBMS_BACKUP_RESTORE
did the job. Now, let us re-create the controlfile;
Step 10) Re-create the control file
1
2
3
4
5
6
|
$ export
ORACLE_SID=DBSTREP
$ export
ORACLE_HOME=/oracle/product/11.1.0/db
$ sqlpplus /nolog
SQL> conn / as sysdba
SQL> shutdown
immediate
SQL>
@create_ct_dbstrep2.sql
|
After the control file
is successfully recreated, then your target database “DBSTREP2″ is ready. Just
double check again the location of redo logs and control files.
1
2
3
4
|
$ export
ORACLE_SID=+ASM
$ export
ORACLE_HOME=/oracle/product/11.1.0/asm
$ asmcmd
|
ASMCMD> cd
BSCSDATA00/DBSTREP2
ASMCMD> ls -al
Name
CONTROLFILE/
DATAFILE/
ONLINELOG/
TEMPFILE/
control01.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1019.737393459
control02.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1020.737393459
control03.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1021.737393459
example01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1016.737392407
redo01.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_1.1022.737393467
redo02.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_2.1023.737393469
redo03.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_3.1024.737393469
sysaux01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1014.737392407
system01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1015.737391459
t_rep01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1013.737392407
temp01.dbf => +BSCSDATA00/DBSTREP2/TEMPFILE/TEMP.1025.737393513
undotbs01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1017.737392407
users01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1018.737392407
ASMCMD> ls -al
Name
CONTROLFILE/
DATAFILE/
ONLINELOG/
TEMPFILE/
control01.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1019.737393459
control02.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1020.737393459
control03.ctl => +BSCSDATA00/DBSTREP2/CONTROLFILE/Current.1021.737393459
example01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1016.737392407
redo01.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_1.1022.737393467
redo02.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_2.1023.737393469
redo03.log => +BSCSDATA00/DBSTREP2/ONLINELOG/group_3.1024.737393469
sysaux01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1014.737392407
system01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1015.737391459
t_rep01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1013.737392407
temp01.dbf => +BSCSDATA00/DBSTREP2/TEMPFILE/TEMP.1025.737393513
undotbs01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1017.737392407
users01.dbf => +BSCSDATA00/DBSTREP2/DATAFILE/UNKNOWN.1018.737392407
No comments:
Post a Comment