当前位置: 首页 > 编程日记 > 正文

第十章:控制文件





控制文件管理


[大纲]

  •    控制文件的结构
  •  控制文件的复用
  •  控制文件的重建
  •  控制文件的管理


一、数据库控制文件


控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用该文件在实例和数据库之间建立关联的。当发生实例故 障时,控制文件记载的信息可用于实例的恢复。


1.控制文件概述

每个Oracle 数据库都有一个控制文件,它是一个记彔数据库物理结构的小型二进制文件。Oracle 数据 库通常使用控制文件来定位数据库文件并管理数据库的状态。
       控制文件包含以下信息:

  • 数据库名称和数据库唯一标识符(DBID)
  • 数据库创建的时间戳
  • 有关数据文件,联机重做日志文件和归档重做日志文件的信息 
  • 检查点信息,日志切换是的日志序号,表空间信息 
  • RMAN备份


控制文件用于以下目的:

  • 它包含有关打开数据库所需的数据文件,联机重做日志文件等信息。(mount)
  • 控制文件跟踪数据库更改的结构。 例如,当管理员添加,重命名或删除数据文件或联机重做日志文件时,数据库会更新控制文件以反映此更改。
  • 在数据库未打开时包含必须可访问的元数据。

例如,控制文件包含恢复数据库所需的信息,包括检查点。它指示 redo stream 中需要开始实例恢复的 SCN。 在检查点 SCN 之前提交的更改都保证保存在数据文件的磁盘上。检查点进程至少每三秒在控制文件中记彔有关 联机重做日志中检查点位置的信息。

Oracle 数据库在数据库使用期间不断读取和写入控制文件,并且叧要数据库处于打开状态,就必须可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。例如添加数据文件,更新存储在控制文件中的信息。




2.复用控制文件Oracle


数据库允许同时打开多个相同的控制文件并将其写入同一数据库。通过在不同磁盘上复用控制文件,可以实现数据库冗余,从而避免单点故障。(Oracle 强烈建议您的数据库至少包含两个控制文件,并且它们位于不同的物理磁盘上)

如果控制文件因磁盘故障而损坏,则必须关闭关联的实例。可以使用来自另一个磁盘的控制文件的完整副本来恢复损坏的控制文件,并且可以重新启动实例。在这种情况下,不需要介质恢复。

   复用控制文件的运行情况如下:

  •   数据库从 CONTROL_FILES 数据库初始化参数文件中列出的所有控制文件名。
  •    数据库操作期间叧读取从 CONTROL_FILES 参数中列出的第一个文件。
  •    如果任何控制文件在数据库操作期间变得丌可用,则该实例将无法运行并终止。



3.控制文件



image



3.1 可变部分(循环重用记)



例 如 RMAN 备 份 信 息 。 到 了 control_file_record_keep_time 之 后 , 就 会 被 覆 盖 。 参 数control_file_record_keep_time 是一个位于控制文件中比较重要的参数。它决定了 控制文件里可重复使用的记彔所能保存的最小天数。当一条新的记彔需要添加到可重用记彔 的空间时,并且最老的记彔在可重用记彔空间中还没有老化,即实际保留的天数未超过这 个参数规定的天数,则控制文件中可重用记彔部分的空间将被自动扩展,此时控制文件尺寸 将会变大。

image


3.2 不可变部分(非重用记)

关于数据库的那些信息,文件位置,大小,日志位置,数据库名,等等是不会丢失的!控制文件中会为每个数据文件预留 180 字节的空间,该空间将用于记载数据文件的名称、尺寸、状态以及检查点等信息,假定数据库最多可以包含 1000 个数据文件,那么控制文件就要为数据文件分配大约 180KB 的空间。在执行 CREATEDATABASE 命令建立数据库时,通过设置永久参数可以设定数据库可以包含的最大数据文件以及重做日志个数等,这些永久参数的设置会影响控制文件的尺寸。这些参数是:

• MAXDATAFILES:用于指定控制文件可记载的最大数据文件个数。

SQL> set linesize 1000;
SQL> col name for a50;
SQL>  select name from v$datafiles;select name from v$datafiles*
ERROR at line 1:
ORA-00942: table or view does not existSQL> select  name from v$datafile;NAME
--------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/system01.dbf
/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf9 rows selected.SQL>
View Code

• MAXLOGFILES:用于指定数据库中重做日志组的最大个数。

• MAXLOGMEMBERS:用于指定每个日志组的最大日志成员个数。

• MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数。

• MAXINSTANCES:用于指定可以同时访问数据库的最大实例个








二、管理控制文件


1.创建控制文件



1.1 创建新的控制文件:

数据库的所有控制文件都已永久损坏,并且没有备份控制文件。

 您想要更改数据库名称:

SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
SQL> col member for a50 ;
SQL> select member from v$logfile;MEMBER
--------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.logSQL> select name from  v$datafile;NAME
--------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/system01.dbf
/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf
/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf9 rows selected.SQL> col for value a100;
SP2-0158: unknown COLUMN option "value"
SQL> col value for a100;
SQL> select value from v$parameter where name ='control_files';VALUE
----------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctlSQL>
View Code


列出数据库所有数据库文件和重做日志文件;该 CREATE CONTROLFILE 语句可能会损坏指定的数据文件和重做日志文件。省略文件名可能会导致该文件中的数据丢失,或者无法访问整个数据库。

CREATE CONTROLFILESET DATABASE prodLOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log','/u01/oracle/prod/redo01_02.log'),GROUP 2 ('/u01/oracle/prod/redo02_01.log','/u01/oracle/prod/redo02_02.log'),GROUP 3 ('/u01/oracle/prod/redo03_01.log','/u01/oracle/prod/redo03_02.log')
RESETLOGSDATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,'/u01/oracle/prod/rbs01.dbs' SIZE 5M,'/u01/oracle/prod/users01.dbs' SIZE 5M,'/u01/oracle/prod/temp01.dbs' SIZE 5MMAXLOGFILES 50MAXLOGMEMBERS 3MAXLOGHISTORY 400MAXDATAFILES 200MAXINSTANCES 6
ARCHIVELOG ;

实验操作:




1.2 管理控制文件

控制文件相关视图


V$CONTROLFILE --列出实例中所有控制文件的名字及状态信息
V$PARAMETER --列出所有参数的位置及状态信息
V$CONTROLFILE_RECORD_SECTION --列出控制文件中记彔的部分信息
SHOWPARAMETER CONTROL_FILES --列出控制文件的名字、状态、位置



在复制控制文件之前关闭数据库。可以通过将文件复制到新名称或位置以及更改控制文件列表中的文件名来重命名现有控制文件;

步骤:

1. 关闭数据库。

2. 使用操作系统命令将现有控制文件复制到新位置。

3. 编辑 CONTROL_FILES 数据库初始化参数文件中的参数以添加新控制文件名,或更改现有控制文件名。

4. 重启数据



2.备份控制文件

控制文件本身也有必要在适当的时候进行备份,特别是数据库的结构行了很大的修改。那么,可不可以将控制文件复制到另外一个位置,就算是备份了呢?这样做没有任何意义,因为控制文件里面的信息是不断更新的,如果把这样的备份用于启动数据库就会失败。Oracle9i 提供了一个系统命令,可以将控制文件以脚本的形式备份到跟踪(或二进制)文件中,可以将此备份的脚本通过修改用于控制文件的重建。这条命令如:

---SQL语句:
ALTER DATABASE BACKUP CONTROLFILE to TRACE;
---备份二迚制:
ALTER DATABASE BACKUP CONTROLFILE to'/oracle/backup/control.bkp';


---生成控制文件的文本文件并查看其控制文件的具体信息

---查看控制文件的信息
--1:创建一个控制文件的信息文件
SQL> alter  database backup controlfile to trace;Database altered.SQL>---2:查看 跟踪日志文件信息SQL> select  name ,value  from  v$diag_info;NAME                                     VALUE
---------------------------------------- ----------------------------------------------------------------------------------------------------
Diag Enabled                             TRUE
ADR Base                                 /u01/app/oracle
ADR Home                                 /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace                               /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert                               /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident                            /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump                               /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor                           /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File                       /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_25246.trc
Active Problem Count                     1
Active Incident Count                    111 rows selected.---切换到 跟踪日志的文件路径
[oracle@oracle ~]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
[oracle@oracle trace]$ ls
alert_orcl.log       orcl_gen0_6711.trc   orcl_m000_6681.trc   orcl_m001_24003.trc  orcl_mmon_6796.trc  orcl_ora_8948.trc---5:查看 跟踪日志文件内容
[oracle@oracle trace]$ cat alert_orcl.log---直到刚才生成 控制文件信息的命令位置
........
........Thread 1 cannot allocate new log, sequence 133
Private strand flush not completeCurrent log# 3 seq# 132 mem# 0: /u01/app/oracle/oradata/orcl/redo03.log
Mon Jan 21 22:01:30 2019
Thread 1 advanced to log sequence 133 (LGWR switch)Current log# 1 seq# 133 mem# 0: /u01/app/oracle/oradata/orcl/redo01.log
Mon Jan 21 22:08:33 2019
Thread 1 advanced to log sequence 134 (LGWR switch)Current log# 2 seq# 134 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log
Mon Jan 21 22:46:39 2019
alter  database backup controlfile to trace
Mon Jan 21 22:46:39 2019
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_24724.trc
Completed: alter  database backup controlfile to trace
[oracle@oracle trace]$----7:查看生成的 控制文件信息的文本文件:
[oracle@oracle trace]$ more orcl_ora_24724.trc
.....具体内容省略.....---8:过滤一些没有必要的 注释说明信息,并生成一个新的文件[oracle@oracle trace]$ more   orcl_ora_24724.trc  | grep -v ^[--] > controlfile_info.txt---10:查看新生成的控制文件的内容
[oracle@oracle trace]$ more controlfile_info.txt
Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_24724.trc
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1
System name:    Linux
Node name:      oracle.example.com
Release:        4.1.12-37.4.1.el6uek.x86_64
Version:        #2 SMP Tue May 17 07:23:38 PDT 2016
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 29
Unix process pid: 24724, image: oracle@oracle.example.com (TNS V1-V3)*** 2019-01-21 22:46:39.019
*** SESSION ID:(125.48907) 2019-01-21 22:46:39.019
*** CLIENT ID:() 2019-01-21 22:46:39.019
*** SERVICE NAME:(SYS$USERS) 2019-01-21 22:46:39.019
*** MODULE NAME:(sqlplus@oracle.example.com (TNS V1-V3)) 2019-01-21 22:46:39.019
*** CLIENT DRIVER:(SQL*PLUS) 2019-01-21 22:46:39.019
*** ACTION NAME:() 2019-01-21 22:46:39.019
*** CONTAINER ID:(1) 2019-01-21 22:46:39.019STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE'/u01/app/oracle/oradata/orcl/system01.dbf','/u01/app/oracle/oradata/orcl/sysaux01.dbf','/u01/app/oracle/oradata/orcl/undotbs01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf','/u01/app/oracle/oradata/orcl/users01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/system01.dbf','/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-12-23_09-47-51-PM.dbf'SIZE 104857600  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-12-23_09-47-51-PM.dbf'SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = CDB$ROOT;
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
DATAFILE'/u01/app/oracle/oradata/orcl/system01.dbf','/u01/app/oracle/oradata/orcl/sysaux01.dbf','/u01/app/oracle/oradata/orcl/undotbs01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf','/u01/app/oracle/oradata/orcl/users01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/system01.dbf','/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET AL32UTF8
;
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'SIZE 206569472  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-12-23_09-47-51-PM.dbf'SIZE 104857600  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-12-23_09-47-51-PM.dbf'SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = CDB$ROOT;
[oracle@oracle trace]$
[oracle@oracle trace]$
View Code






3:查看控制文件信息


SQL> show parameter conNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_interconnects                string
connection_brokers                   string      ((TYPE=DEDICATED)(BROKERS=1)),((TYPE=EMON)(BROKERS=1))
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl
control_management_pack_access       string      DIAGNOSTIC+TUNING
db_file_name_convert                 string
dg_broker_config_file1               string      /u01/app/oracle/product/12.1.0/dbhome_1/dbs/dr1orcl.datNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file2               string      /u01/app/oracle/product/12.1.0/dbhome_1/dbs/dr2orcl.dat
dst_upgrade_insert_conv              boolean     TRUE
global_context_pool_size             string
log_archive_config                   string
log_file_name_convert                string
nls_nchar_conv_excp                  string      FALSE
pdb_file_name_convert                string
SQL>


SQL> ho ls  /u01/app/oracle/product/12.1.0/dbhome_1/dbs/
hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl  spfileorcl.oraSQL> ho ls /u01/app/oracle/oradata/orcl/
control01.ctl  pdbseed  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
control02.ctl  proc     redo02.log  sysaux01.dbf  temp01.dbf    users01.dbfSQL>




4:新增数据库控制文件

SQL> select instance_name ,status from v$instance;INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPENSQL> show parameter coantrol_file
SQL> show parameter control_fileNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl
SQL> set linesize 1000;
SQL> col name for a150;
SQL> select  name  from v$controlfile;NAME
-------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctlSQL> alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl' scope=spfile;System altered.SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
[oracle@oracle ~]$ cd /u01/app/oracle/oradata/orcl/
[oracle@oracle orcl]$ ls
control01.ctl  control02.ctl  pdbseed  proc  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[oracle@oracle orcl]$ cp control01.ctl  control03.ctl
[oracle@oracle orcl]$ ls
control01.ctl  control02.ctl  control03.ctl  pdbseed  proc  redo01.log  redo02.log  redo03.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
[oracle@oracle orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@oracle orcl]$ sqlplus / as sysdba;SQL*Plus: Release 12.1.0.2.0 Production on Tue Jan 22 23:53:04 2019Copyright (c) 1982, 2014, Oracle.  All rights reserved.Connected to an idle instance.SQL> startup
ORACLE instance started.Total System Global Area 1509949440 bytes
Fixed Size                  2924640 bytes
Variable Size             905973664 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.
SQL> select  name from v$Controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctlSQL>










5:删除数据库 控制文件


SQL> show parameter  control_file;NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl, /u01/app/oracle/product/12.1.0/dbhome_1/dbs/u01/app/oracle/oradata/orcl/control03.ctl
SQL> desc  v$controlfileName                                      Null?    Type----------------------------------------- -------- ----------------------------STATUS                                             VARCHAR2(7)NAME                                               VARCHAR2(513)IS_RECOVERY_DEST_FILE                              VARCHAR2(3)BLOCK_SIZE                                         NUMBERFILE_SIZE_BLKS                                     NUMBERCON_ID                                             NUMBERSQL> set linesize 1000;
SQL> col name  for a150;
SQL> select name  from v$controlfile;NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/u01/app/oracle/oradata/orcl/control03.ctlSQL> alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl' scope=spfile;System altered.SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.Total System Global Area 1509949440 bytes
Fixed Size                  2924640 bytes
Variable Size             905973664 bytes
Database Buffers          587202560 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.
SQL> show parameter control_fileNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl





6:模拟控制文件损坏丢失


--step1>关闭数据库,删除03的控制文件
SQL> shutdown immediate;
--手工删除控制文件:rm -rf  /u01/app/oracle/oradata/orcl/control03.ctl
--step2>启动数据库,观察alter日志和终端报错
SQL> startup
--step3>解决方案
--方法一:
cp /u01/app/oracle/oradata/orcl/control02.ctl  /u01/app/oracle/oradata/orcl/control03.ctl
----方法二:
alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl';
--step4>重启数据库
SQL>alter database mount;
SQL>alter database open;







7:重建控制文件;(选做)


step1>将控制文件备份到跟踪文件,获得控制文件的重建脚本;
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
step2>关闭并启动数据库到 NOMOUNT 状态
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE'/u01/app/oracle/oradata/orcl/system01.dbf','/u01/app/oracle/oradata/orcl/sysaux01.dbf','/u01/app/oracle/oradata/orcl/undotbs01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf','/u01/app/oracle/oradata/orcl/users01.dbf','/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/system01.dbf','/u01/app/oracle/oradata/orcl/proc/sysaux01.dbf','/u01/app/oracle/oradata/orcl/proc/proc_users01.dbf'
CHARACTER SET WE8MSWIN1252
;
RECOVER DATABASE;
ALTER DATABASE OPEN;
-- Open all the PDBs.
ALTER PLUGGABLE DATABASE ALL OPEN;step3>重建临时表空间
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'SIZE 62914560  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PDB$SEED;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp012018-11-28_01-12-22-AM.dbf'SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = PROC;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/proc/temp012018-11-28_01-12-22-AM.dbf' REUSE;
ALTER SESSION SET CONTAINER = CDB$ROOT;

转载于:https://www.cnblogs.com/ios9/p/10263250.html

相关文章:

UIImage图片拉伸方法

纵观移动市场,一款移动app,要想长期在移动市场立足,最起码要包含以下几个要素:实用的功能、极强的用户体验、华丽简洁的外观。华丽外观的背后,少不了美工的辛苦设计,但如果开发人员不懂得怎么合理展示这些设…

【摘录】GestureDector使用

boolean onDoubleTap(MotionEvent e)解释:双击的第二下Touch down时触发boolean onDoubleTapEvent(MotionEvent e)解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。boolean onDown(MotionEvent e)解释:Touch …

IDEA新建springboot项目发生错误

idea新建spring boot项目 选择这个默认的Default 之后弹出提示框如下 这个时候首先试一下更换一下网络,我用的是wifi就换成热点,就可以了,是因为网络的问题

windows form窗体应用程序,建一个记事本参考代码,重点是打开,保存,另存为...

//当点击打开的时候private string files; //建一个成员变量,用来存储打开的路径private void 打开OToolStripMenuItem_Click(object sender, EventArgs e){//openFileDialog1.Filter "文本文件|*txt|视频文件|*avi;*jpg"; //filter建立一个筛选器//ope…

『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!

前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)——基础之后 『参考』.net CF组件编程…

vs2010设置boost开发环境

1. 编译boost类库 2. 设置vs2010的环境 <1>. 编译boost类库 前面一篇文章介绍了如何在linux下建立boost的开发环境&#xff0c;并且编写了一个测试程序&#xff0c;这里将试着在windows下编译boost&#xff0c;同时设置vs2010的开发环境&#xff0c;使用vs来作为开发的…

怎样把字符1变成数字1

直接使用字符bai1减去字符0即可&#xff0c;如&#xff1a;‘1’-0’ 解释&#xff1a; 这样做可行是因为字符0到字符9在ascii编码时是连续的&#xff0c;字符0的ascii值是48&#xff0c;字符1的ascii值是49&#xff0c;其他数字字符依次往后排&#xff0c;而ascii值实际上就…

C#基础篇--文件(流)

1&#xff1a;Path类是专门用来操作文件路径的&#xff08;Path类是静态类&#xff09;&#xff1a;当然用字符串的处理办法也能实现。 string str "C:\Users\成才\Desktop\Hashtable.txt";//返回文件名Console.WriteLine(Path.GetFileName(str));//返回文件名&…

adoquery查询结果如何赋给一个变量(delphi和c++ builder)

我用的是adoquery进行数据库查询&#xff0c;但是我不想把查询的结果显示出来&#xff0c;只是想赋给一个变量&#xff0c;请问我这个变量该怎样去设置呢 &#xff1f; 回复人&#xff1a;sunriver 回复时间&#xff1a;2005-6-3 9:11:00procedure TForm1.Button1Click(Sender:…

pdf格式转换成jpg的简单教程

如何将pdf文件在线免费转换成jpg图片&#xff1f;因为文件保存为图片的形式比较容易查看&#xff0c;因此小伙伴们在编辑完pdf文件之后都会将其保存为jpg图片。那究竟应如何将pdf文件在线转换成图片呢&#xff1f;我们在网上也可以找到很多工具&#xff0c;但是转换效果却是不尽…

npm should be run outside of the Node.js REPL, in your normal shell

错误&#xff1a; npm should be run outside of the Node.js REPL, in your normal shell 在搭建vue环境时报错&#xff0c; 设置缓存文件夹 npm config set cache "D:\vueProject\nodejs\node_cache"和 设置全局模块存放路径 npm config set prefix “D:\vueProjec…

php错误封装类

1、创建MyErrorHandler.php文件 代码如下&#xff1a; <?php class MyErrorHandler {public $message;public $filename;public $line;public $vars array();protected $_noticeLog F:\root\noticeLog.log;public function __construct ($message,$filename,$line,$vars)…

sqlserver 与 mysql 联合更新两个表 区别

sqlserver:UPDATE a SET a.gradeb.id FROM userinfo a,levelinfo b WHERE a.exp>b.minvalue AND a.exp<b.maxvaluemysql:UPDATE userinfo a,levelinfo b SET a.gradeb.id WHERE a.exp>b.minvalue AND a.exp<b.maxvalue转载于:https://www.cnblogs.com/andy_tigger/…

Django web框架

Web框架 web 框架本质 - Web应用本质上就是一个socket服务端&#xff0c;而用户的浏览器就是一个socket客户端。 HTTP协议 HTTP协议介绍HTTP协议对收发消息的格式要求每个HTTP请求和响应都遵循相同的格式&#xff0c;一个HTTP包含Header和Body两部分&#xff0c;其中Body是可…

输入vue ui没反应

在cmd中输入 vue ui没有反应 输入 vue -h查看&#xff0c;发现是版本太低&#xff0c;根本没有ui 这是因为vue的版本太低导致的&#xff0c; 输入cnpm i -g vue/cli 升级脚手架即可 升级完成后&#xff0c;输入vue -h 最后输入vue ui即可

Windows 10 开发日记(五)-- 当Binding遇到异步 -- 解决方案

前文再续&#xff0c;上一章提出了问题&#xff0c;本章提出了三种解决方案&#xff1a; 解决方案一&#xff1a;手动进行异步转换,核心思想:将binding做的事情放入CodeBehind FilterItemControl.XAML: <Grid><Image x:Name"FilterImage" Stretch"Unif…

java实现局域网内单对单和多对多通信的设计思路

这个看起来是很简单的&#xff0c;不就是socket吗&#xff0c;但是&#xff0c;要想有一个好的用户体验&#xff0c;还是很难的&#xff0c;主要问题有&#xff1a; 既然是局域网&#xff0c;那么就必然没有一个固定的IP地址作为主机&#xff0c;这个问题怎么解决&#xff1f; …

GIT - 拉取其他仓库的某个分支的代码

场景 在A仓库拉取B仓库develop分支的代码到A的本地分支 步骤 查看本地已有的远程仓库git remote // 查看远程仓库的名字 发现只有A-v 更加详细的远程仓库说明 复制代码添加远程仓库git remote add BName Bgiturl // 添加远程仓库 BNname别名 Bgiturl远程的git地址 复制代码添…

fetchMetadata: sill install loadAllDepsIntoIdealTree

在搭建vue项目的时候出现报错如下 fetchMetadata: sill install loadAllDepsIntoIdealTree 先输入 npm install -g cnpm --registryhttps://registry.npm.taobao.org 在输入cnpm install

redmine忘记username和password

环境&#xff1a; Ubuntu 13.10 bitnami-redmine-2.5.1-1-linux-x64-installer.run 用bitnami安装完redmine以后&#xff0c;有是否忘记了username和password。可是又没有配置邮件server&#xff0c;无法找回password。 仅仅能去server更改了。更改过程例如以下&#xff1a; 1…

SpringBoot b2b2c 多用户商城系统(十五)Springboot整合RabbitMQ...

这篇文章带你了解怎么整合RabbitMQ服务器&#xff0c;并且通过它怎么去发送和接收消息。我将构建一个springboot工程&#xff0c;通过RabbitTemplate去通过MessageListenerAdapter去订阅一个POJO类型的消息。 准备工作15minIDEAmaven 3.0在开始构建项目之前&#xff0c;机器需要…

SQLite 日期类型(转)

SQLite日期类型 简单示例: SELECT datetime(CHANGE_DATE,localtime), strftime(%Y-%m-%d,CHANGE_DATE,localtime), datetime(now,localtime), strftime(%Y-%m-%d,now,localtime), DATE(now,localtime), time(now,Localtime), time(2010-11-27 01:…

Visual Studio Code常用插件

名称 功能 Chinese (Simplified) Language Pack for Visual Studio Code 汉化 VSCode Auto Close Tag 自动为写的html标签进行闭 合 Beautify 代码格式化 Element UI Snippets Element UI的代码提示功能 Material Icon Theme 为项目换上相应的图标 Vetur对vue代码进行高亮 View…

sqlserver导入excel的电话号码(身份证)变为科学计数解决方式

如果excel中有一列存的是手机号码或者身份证号码&#xff0c;那么导入到sql中时&#xff0c;会把手机或者身份证当作数字格式对待&#xff0c;因而会以科学记数法的形式存在sqlserver表中&#xff0c;解决方式&#xff0c;先将excel文件另存为文本文件&#xff08;制表符&#…

Git的其他用法

2019独角兽企业重金招聘Python工程师标准>>> 目录&#xff1a; 减少【.git】文件夹的大小和文件数更换git for windows的文本编辑器修改已经提交的commit说明合并commit解决merge时出现的冲突回退一个merge获取某一commit的修改将低版本push到Github&#xff08;删掉…

UE中的几个极有用功能

1. 指定目录和文件类型批量查找目标字符串 示例&#xff1a;在H:\qtdemo目录&#xff08;含子目录&#xff09;中下的*.h和*.cpp中&#xff0c;查找“main”字符串 查找结果&#xff1a; 2. 在当前活动窗口中查找目标字符串&#xff08;Ctrl F&#xff09; &#xff08;1&…

Missing space before value for key ‘routes‘ key-spacing

vue项目报错&#xff1a; Missing space before value for key ‘routes’ key-spacing 解决办法&#xff1a; 字母new前面应该是1个空格&#xff0c;我写了两个空格&#xff0c;删去一个空格即可

Oracle Mutex 机制 说明

之前也整理过一篇文章来说明Oracle Lock的&#xff0c;参考&#xff1a; 锁 死锁 阻塞 Latch 等待 详解 http://blog.csdn.net/tianlesoftware/archive/2010/08/19/5822674.aspx 在这篇文章里&#xff0c;提到了System Locks&#xff0c;它包含&#xff1a; &#xff08;1&…

POJ-1860-Currency Exchange

链接&#xff1a;https://vjudge.net/problem/POJ-1860 题意&#xff1a; 有N个点&#xff0c;支持货币兑换&#xff0c;从货币a->b手续费c&#xff0c;汇率r。 求能否换一圈使总净额增加。 思路&#xff1a; bellman-ford。 找一个正权回路。 代码&#xff1a; #include &l…

如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因

注释 <link rel"icon" href"#"> 这一句后试试转载于:https://www.cnblogs.com/lummon/p/4559185.html