دیتابیس اوراکل

دیتابیس اوراکل
طبقه بندی موضوعی

۵ مطلب با موضوع «RMAN» ثبت شده است

RMAN-03009, ORA-19566: exceeded limit of 0 corrupt blocks for file

Error:

RMAN-03009: failure of backup command on DISK02 channel at 06/15/2022 01:44:04
ORA-19566: exceeded limit of 0 corrupt blocks for file +DATA/DB1/DATAFILE/tab_index.260.1104075295

 

Solution (Resizing the datafile to Smaller size):

SQL> alter database datafile '+DATA/DB1/DATAFILE/tab_index.260.1104075295' resize 946368M;

 

RMAN-06613: Connect identifier for DB_UNIQUE_NAME not configured

موقع بکاپ گرفتن از دیتابیس گارد خطای زیر را در RMAN گرفتیم:

ORA-20079: full resync from primary database is not done

 

doing automatic resync from primary

resyncing from database with DB_UNIQUE_NAME PRIMARY

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03015: error occurred in stored script bk_primary

RMAN-03002: failure of sql command at 06/28/2022 20:00:05

RMAN-03014: implicit resync of recovery catalog failed

RMAN-03009: failure of partial resync command on default channel at 06/28/2022 20:00:05

RMAN-06613: Connect identifier for DB_UNIQUE_NAME STANDBY not configured

 

برای حل این خطا در دیتابیس primary باید دستور زیر اجرا شود:

[oracle@PRIMARY ~]$ rman target / catalog user@CATALOG

RMAN> configure db_unique_name 'STANDBY' connect identifier 'STANDBY';

 

starting full resync of recovery catalog

full resync complete

new RMAN configuration parameters:

CONFIGURE DB_UNIQUE_NAME 'STANDBY' CONNECT IDENTIFIER  'STANDBY';

new RMAN configuration parameters are successfully stored

starting full resync of recovery catalog

full resync complete

 

و همچنین در دیتابیس استندبای دستور زیر اجرا شد:

[oracle@STANDBY ~]$ rman target / catalog user@CATALOG

RMAN> resync catalog;

 

starting partial resync of recovery catalog

partial resync complete

 

 

Backup and Restore ARCHIVELOG

  • BACKUP ARCHIVELOG

RMAN> backup format '/home/oracle/back/back_for_stbydf_%s_%p.back' archivelog sequence 188168 thread 2;
OR
RMAN> backup format '/home/oracle/back/back_for_stbydf_%s_%p.back' archivelog from sequence 189118 until sequence 189143 thread 2;

 

RMAN> list backup of archivelog from sequence 189118 until sequence 189143 thread 2;

 

  • RESTORE ARCHIVELOG

RMAN> catalog start with '/home/oracle/back';
RMAN> restore archivelog sequence 188168 thread 2;
OR
RMAN> restore archivelog from sequence 189118 until sequence 189143 thread 2;

Restore and Recover

ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/db_1; export ORACLE_HOME
ORACLE_SID=TSTDB; export ORACLE_SID

RMAN>startup nomount pfile='/oracle/product/11.2.0.4/db_1/dbs/initTSTDB.ora';
RMAN>restore controlfile from '/home/oracle/TSTDB/autobackup/2021_05_15/o1_mf_s_1072634365_j9zm5p0p_.bkp';
RMAN>alter database mount;
RMAN>run {
restore database;
switch datafile all;
set until sequence 60951;
recover database;
}
RMAN> alter database open resetlogs;

Create Controlfile

ممکن است در وضعیتی قرار بگیریم که همه controlfileهای دیتابیس ما از بین رفته یا corrupt شده باشند و هیچ بکاپی هم از آنها موجود نباشد، در چنین وضعیتی باید به صورت دستی یک controlfile ایجاد کنیم. برای اینکه بتوانیم دستور CREATE CONTROLFILE را تولید کنیم، 2 حالت وحود دارد:

 

حالت اول: اگر دیتابیس هنوز در وضعیت mount یا open است، میتوانیم به صورت زیر این کار را انجام دهیم.

 

SQL> alter database backup controlfile to trace as '/home/oracle/ctl.sql';

 

در فایل ctl.sql همانطور که مشاهده میکنید، دستور CREATE CONTROLFILE به 2 صورت ایجاد شده است، یکی برای حالتی که redo log fileهای شما سالم هستند، یکی هم برای حالتی که redo log fileهای شما به هر دلیلی در دسترس نیستند و یا آسیب دیده اند. اگر redo log fileهای شما سالم هستند، در دستور CREATE CONROLFILE از عبارت NORESETLOGS استفاده کنید، که نیازی به open resetlog نباشد و دیتابیس را به صورت معمولی open کنید. در غیر اینصورت باید از عبارت RESETLOGS استفاده کنید. بسته به اینکه کدام روش را انتخاب میکنید، بقیه مراحلی هم که باید بعد از ایجاد controlfile انجام شود، در همان فایل trace آمده است.

 

حالت دوم: اگر دیتابیس در حالت mount یا open نباشد، باید دستور CREATE CONTROLFILE را خودمان تولید کنیم. یک نمونه از این دستور در زیر آمده است. در هر دیتابیس باید یک سری از موارد آن مانند نام datafileها، redo fileها و ... را تغییر دهید.

 

[oracle@bpdb01 ~]$ vi /home/oracle/create_controlfile_strings.sql

CREATE CONTROLFILE REUSE DATABASE "CDBCAT" NORESETLOGS(OR RESETLOGS)  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '+DATA/CDBCAT/ONLINELOG/group_1.269.1051706207'  SIZE 600M BLOCKSIZE 512,
  GROUP 2 '+DATA/CDBCAT/ONLINELOG/group_2.270.1051706277'  SIZE 600M BLOCKSIZE 512,
  GROUP 3 '+DATA/CDBCAT/ONLINELOG/group_3.271.1051706237'  SIZE 600M BLOCKSIZE 512
DATAFILE
  '+DATA/CDBCAT/DATAFILE/system.257.1049211357',
  '+DATA/CDBCAT/DATAFILE/sysaux.265.1049211403',
  '+DATA/CDBCAT/DATAFILE/undotbs1.260.1049211429',
  '+DATA/CDBCAT/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.273.1049211811',
  '+DATA/CDBCAT/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.274.1049211811',
  '+DATA/CDBCAT/DATAFILE/users.263.1049211429',
  '+DATA/CDBCAT/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.275.1049211811',
  '+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/DATAFILE/system.280.1049212669',
  '+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/DATAFILE/sysaux.281.1049212669',
  '+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/DATAFILE/undotbs1.279.1049212669',
  '+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/DATAFILE/users.283.1049212693',
  '+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/DATAFILE/rcat.317.1051270001',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/system.331.1051617437',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/sysaux.332.1051617439',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/undotbs1.330.1051617437',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/users.334.1051617457',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt.266.1051707583',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt_ecm_depot.341.1051707945',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt_deepdive.342.1051707973',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt_ad4j_ts.344.1051711033',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt_ecm_depot_ts.345.1051711035',
  '+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/DATAFILE/mgmt_tablespace.346.1051711035'
CHARACTER SET AL32UTF8;

 

نکته 1: اگر لیست دیتافایل ها را نداشته باشیم، میتوانیم به صورت زیر از controlfile که corrupt شده بدست آوریم: 

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+DATA/P01LIVE/CONTROLFILE/current.483.1082170095

 

ASMCMD> cp +DATA/P01LIVE/CONTROLFILE/current.483.1082170095 /home/oracle

[oracle@bpdb01 ~]$ strings /home/oracle/current.483.1082170095 > /tmp/controlfile_info.txt

[oracle@bpdb01 ~]$ more /tmp/controlfile_info.txt

در فایل controlfile_info.txt لیست دیتافایل ها وجود دارند. فقط دقت داشته باشید که ممکن است نام بعضی از دیتافایل ها تکراری باشد.

 

بعد از اینکه فایل CREATE CONTROLFILE را تولید کردیم، باید مراحل زیر را انجام دهیم تا دیتابیس استارت شود:

SQL> startup nomount;

SQL> @/home/oracle/create_controlfile_strings.sql

 

For NORESETLOGS:

SQL> RECOVER DATABASE;

SQL> ALTER SYSTEM ARCHIVE LOG ALL;

SQL> ALTER DATABASE OPEN;

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

 

For RESETLOGS:

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;

SQL> ALTER DATABASE OPEN RESETLOGS;

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

 

SQL> ALTER SESSION SET CONTAINER = "CDB$ROOT";

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 
'+DATA/CDBCAT/TEMPFILE/temp.272.1049211509' SIZE 138412032  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

SQL> ALTER SESSION SET CONTAINER = "PDB$SEED";
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 
'+DATA/CDBCAT/AD8A912FC7D0E1F5E0534302A8C0A045/TEMPFILE/temp.276.1049211841' SIZE 37748736  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

SQL> ALTER SESSION SET CONTAINER = "CATPDB";
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 
'+DATA/CDBCAT/AD8AC2769AE8EE31E0534302A8C08077/TEMPFILE/temp.282.1049212675' SIZE 37748736  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

SQL> ALTER SESSION SET CONTAINER = "EMPDB";
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 
'+DATA/CDBCAT/AFBAA9CC33AA4DF6E0534302A8C0858D/TEMPFILE/temp.333.1051617443' SIZE 77594624  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

 

 

Document:

Doc ID 735106.1

http://www.vinayagaconsultancyltd.co.uk/blogs/rman/recovering-from-loss-of-controlfile