برای بکآپ گیری با RMAN ابتدا باید محل ذخیرهسازی پیشفرض فایلهای بکآپ رو مشخص کنیم.
مرحله اول
دایرکتوری مورد نظر رو ایجاد میکنیم:
C:\Users\Mahdi>md F:\app\Backup
C:\Users\Mahdi>dir F:\app
Volume in drive F has no label.
Volume Serial Number is 76E1-CF78
Directory of F:\app
09/18/2014 01:31 AM <DIR> .
09/18/2014 01:31 AM <DIR> ..
09/14/2014 08:19 PM <DIR> Backup
09/12/2014 06:41 AM <DIR> Mahdi
0 File(s) 0 bytes
4 Dir(s) 304,982,249,472 bytes free
مرحله دوم
وارد محیط sqlplus میشیم و با یوزر sys لوگین میکنیم:
C:\Users\Mahdi>sqlplus
SQL*Plus: Release 12.1.0.1.0 Production on Tue Sep 16 14:42:51 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
سپس دستور زیر را با تغییر آدرس محل بکآپ وارد کنید:
alter system set db_recovery_file_dest='F:\app\Backup';
نکته: آدرس محل ذخیرهسازی بکآپ میتونه در دستگاه شما متفاوت باشه
نکته: آدرس محل ذخیرهسازی بکآپ میتواند در زمان نصب اوراکل مشخص گردد:
بعد از اجرای این دستور سیستم آماده بکآپ گیری در دایرکتوری موردنظر میشود.
مرحله سوم
اقدام بعدی ایجاد یک جدول در داخل دیتابیس به نام جدول PERSON است.
دلیل ایجاد این جدول اینه که بعداً میخوایم حذفش کنیم و توسط بکآپ اون رو restore کنیم تا عملکرد سیستم بکآپ رو تست کنیم.
CREATE TABLE PERSON (id NUMBER, NAME VARCHAR(20));
INSERT INTO PERSON(ID, NAME) values(1, 'Ehsan');
INSERT INTO PERSON(ID, NAME) values(2, 'MAHDI');
INSERT INTO PERSON(ID, NAME) values(3, 'MOEIN');
همونطور که میبینید ما این جدول رو ایجاد کردیم و مقادیر اون به شکل زیر است:
SQL> select * from person
2 ;
ID NAME
---------- --------------------
1 Ehsan
2 MAHDI
3 MOEIN
مرحله چهارم
در این مرحله وارد mode archive log میشیم
در واقع چون اوراکل به صورت پیشفرض فایلهایی برای redo ها ایجاد میکنه و ما قصد داریم این فایلها رو در محل دیگری به صورت ترتیبی کپی کنیم به همین خاطر از دستور زیر در حالت startup mount استفاده میکنیم:
alter databese archivelog;
به دلیل mount نبودن دیتابیس اول باید دیتابیس رو mount کنیم.
اول یکبار دیتابیس رو shutdown میکنیم.
نکته: قبل از shutdown کردن دیتابیس حتماً تغییرات رو commit کنید.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
در قدم بعدی دیتابیس رو mount میکنیم:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1536602112 bytes
Fixed Size 2402968 bytes
Variable Size 973079912 bytes
Database Buffers 553648128 bytes
Redo Buffers 7471104 bytes
Database mounted.
نکته: توجه داشته باشید رفتن به این حالت با startup full دیتابیس فرق داره
حال دوباره دستور زیر رو اجرا میکنیم:
SQL> alter database archivelog;
Database altered.
مرحله پنجم
در این مرحله باید به محیط RMAN بریم. برای رفتن به محیط RMAN باید از محیط sqlplus خارج بشیم و سپس به محیط RMAN وارد بشیم:
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64
bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions
C:\Users\Mahdi>rman target /
Recovery Manager: Release 12.1.0.1.0 - Production on Thu Sep 18 01:59:01 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1385843670, not open)
RMAN>
نکته: RMAN ابزاری برای انجام عملیاتهای restore و recover بر روی دیتابیس است.
حال باید یکبار با استفاده از دستور زیر از دیتابیس بکآپ بگیریم. بکآپ گرفته شده در مسیری که از قبل داده شده ذخیره میشود:
RMAN> backup database plus archivelog;
نکته: به ساعت و دقیقه بعد از دستور بکآپ توجه کنید.
برای اینکه مطمئن بشیم بکآپ از سیستم گرفته شده وارد پوشه تعیین شده میشیم:
F:\app\Backup\ORCL\BACKUPSET\2014_09_18>dir
Volume in drive F has no label.
Volume Serial Number is 76E1-CF78
Directory of F:\app\Backup\ORCL\BACKUPSET\2014_09_18
09/18/2014 11:19 AM <DIR> .
09/18/2014 11:19 AM <DIR> ..
09/18/2014 11:19 AM 10,125,312 O1_MF_NCSNF_TAG20140918T111613_B1P8KCKV_.
BKP
09/18/2014 11:19 AM 1,403,617,280 O1_MF_NNNDF_TAG20140918T111613_B1P8CHV5_.
BKP
2 File(s) 1,413,742,592 bytes
2 Dir(s) 302,142,545,920 bytes free
حال از محیط RMAN خارج میشیم:
RMAN> EXIT
Recovery Manager complete.
C:\Windows\System32>
مرحله ششم
وارد محیط SQLPLUS میشیم:
C:\Windows\System32>SQLPLUS
SQL*Plus: Release 12.1.0.1.0 Production on Thu Sep 18 11:26:35 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: SYS AS SYSDBA
Enter password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing
ions
SQL>
چون دیتابیس در حالت startup mount بالا هست یکبار دیتابیس رو shutdown میکنیم و در حالت startup full دوباره دیتابیس رو بالا میآریم:
SQL> SHUTDOWN IMMEDIATE;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 1536602112 bytes
Fixed Size 2402968 bytes
Variable Size 973079912 bytes
Database Buffers 553648128 bytes
Redo Buffers 7471104 bytes
Database mounted.
Database opened.
SQL>
و حال یکبار از جدول PERSON کوئری میگیریم:
SQL> SELECT * FROM PERSON;
ID NAME
---------- --------------------
1 Ehsan
2 MAHDI
3 MOEIN
SQL>
حال با دستور DROP جدول PERSON رو حذف میکنیم:
SQL> DROP TABLE PERSON;
Table dropped.
SQL>COMMIT;
برای اطمینان از پاک شدن جدول PERSON یکبار دیگه از جدول SELECT میگیریم:
SQL> SELECT * FROM PERSON;
SELECT * FROM PERSON
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>
مرحله هفتم
در این مرحله باید DATA FILE ها رو پاک کنیم.
نکته: اگر DATA FILEها رو پاک نکنیم RMAN عملیات بکآپ رو انجام نمیده و RESTORE نمیکنه
دیتابیس رو shutdown میکنیم و از محیط sqlplus خارج میشیم:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64
bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions
C:\Windows\System32>
حال محل DATA FILE ها رو پیدا میکنیم و فقط DATA FILE ها رو حذف میکنیم:
C:\Windows\System32>dir F:\app\Mahdi\oradata\orcl
Volume in drive F has no label.
Volume Serial Number is 76E1-CF78
Directory of F:\app\Mahdi\oradata\orcl
09/12/2014 06:49 AM <DIR> .
09/12/2014 06:49 AM <DIR> ..
09/18/2014 11:44 AM 10,043,392 CONTROL01.CTL
09/18/2014 11:44 AM 52,429,312 REDO01.LOG
09/18/2014 11:44 AM 52,429,312 REDO02.LOG
09/18/2014 11:44 AM 52,429,312 REDO03.LOG
09/18/2014 11:44 AM 912,269,312 SYSAUX01.DBF
09/18/2014 11:44 AM 828,383,232 SYSTEM01.DBF
09/18/2014 11:38 AM 511,713,280 TEMP01.DBF
09/18/2014 11:44 AM 760,225,792 UNDOTBS01.DBF
09/18/2014 11:44 AM 5,251,072 USERS01.DBF
9 File(s) 3,185,174,016 bytes
2 Dir(s) 302,142,382,080 bytes free
C:\Windows\System32>del F:\app\Mahdi\oradata\orcl\*.DBF
C:\Windows\System32>dir F:\app\Mahdi\oradata\orcl
Volume in drive F has no label.
Volume Serial Number is 76E1-CF78
Directory of F:\app\Mahdi\oradata\orcl
09/18/2014 11:50 AM <DIR> .
09/18/2014 11:50 AM <DIR> ..
09/18/2014 11:44 AM 10,043,392 CONTROL01.CTL
09/18/2014 11:44 AM 52,429,312 REDO01.LOG
09/18/2014 11:44 AM 52,429,312 REDO02.LOG
09/18/2014 11:44 AM 52,429,312 REDO03.LOG
4 File(s) 167,331,328 bytes
2 Dir(s) 305,160,224,768 bytes free
C:\Windows\System32>
نکته: به ساعت و دقیقه حذف فایلها دقت کنید.
مرحله هشتم
وارد محیط RMAN میشیم:
C:\Windows\System32>rman target /
Recovery Manager: Release 12.1.0.1.0 - Production on Thu Sep 18 11:58:51 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
برای اینکه بخوایم دیتابیس رو اول restore کنیم و بعد recover کنیم، دیتابیس رو باید به حالت mount ببریم:
RMAN> startup mount;
Oracle instance started
database mounted
Total System Global Area 1536602112 bytes
Fixed Size 2402968 bytes
Variable Size 973079912 bytes
Database Buffers 553648128 bytes
Redo Buffers 7471104 bytes
RMAN>
در این مرحله باید دیتابیس رو توسط RMAN به تاریخ مورد نظرمون برگردونیم.
شکل کلی این دستور مانند زیر است:
restore database until time "to_date('', 'yyyymmddhh24miss')";
این دستور رو با توجه به اطلاعات خود در زمان گرفتن بکآپ در RMAN (دستور backup database plus archivelog) ویرایش کنید:
restore database until time "to_date('20140918114400', 'yyyymmddhh24miss')";
دستور بعدی دستور recover هستش که باید در محیط RMAN وارد بشه.
شکل کلی این دستور مانند زیر است:
recover database until time "to_date('', 'yyyymmddhh24miss')";
این دستور رو همانند دستور قبل ویرایش کنید:
recover database until time "to_date('20140918114400', 'yyyymmddhh24miss')";
حال از محیط RMAN خارج میشیم و نگاهی به پوشه DATA FILE ها میندازیم.
همونطور که مشاهده میکنید DATA FILE ها دوباره ایجاد شدهاند.
نکته: در واقع با عمل restore در RMAN دیتا فایلها برگردانده شده و با عمل recover دیتا فیالها به دیتابیس شناسایی و اعمال میشوند.
مرحله نهم
وارد محیط sqlplus میشیم، و دیتابیس رو یکبار shutdown و در حالت mout یکبار start میکنیم:
بعد از startup mount از دستور زیر برای ریست کردن log ها و open کردن اوراکل استفاده میکنیم، اگر این کار را نکنیم و بخواهیم اوراکل را open کنیم با پیغام خطای زیر مواجه میشویم:
ORA-01589: must use RESETLOG or NORESETLOGS options for database open;
نکته: در حقیقت اینو واسه این میپرسه که log فایلهایی که الان دیتابیس داره رو بر اساس DataFileهای قدیمی نگهداره یا نه براساس DataFileهایی که از طریق بکآپ restore شده log ها رو دوباره ایجاد و reset کنه
نکته: اگر از log فایلهای قبلیتون استفاده کنید باید حتماً DataFileهای برگردونده شده با بکآپ با DataFileهایی که در دیتابیس در آخرین تراکنش براشون Redo Log File ایجاد شده یکی باشد.
alter database open resetlogs;
حال از جدول PERSON یکبار SELECT میگیریم:
SELECT * FROM PERSON;