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

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

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

 

  • راهله شاکری

Create Controlfile

ORA-00227

recover db

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی