控制文件的创建
声明:如果突发意外,导致所有的控制文件都被丢失或者损坏,那么唯一的补救方法就是手动创建一个新的控制文件,使用CREATE CONTROLFILE语句,语法格式如下:
create controlfile
reuse database db_name
logfile
group 1 redofiles_list1
group 2 redofiles_list2
group 3 redofiles_list3
...
datafile
datafile1
datafile2
datafile3
...
maxlogfiles max_value1
maxlogmembers max_value2
maxinstances max_value3
maxdatafiles max_value4
noresetlogs|resetlogs
archivelog|noarchivelog;
解释:
- 1,db_name:数据库名称,通常是orcl。
- 2,redofiles_list1:重做日志组中的重做日志文件列表1,列表中的重做日志文件可以有多个,其下面两个列表与此相同。
- 3,datafile1:数据文件路径,其下面两个列表与此相同。
- 4,max_value1:最大的重做日志文件数,这是一个永久性参数。
- 5,max_value2:最大的重做日志组成员数,这是一个永久性参数。
- 6,max_value3:最大实例数,这是一个永久性参数。
- 7,max_value4:最大数据文件数,这是一个永久性参数。
注意:永久性参数是在创建数据库时所设置的参数,主要包括数据库的名称,maxlogfiles,maxlogmembers,maxinstances等,若改变数据库中的某个永久性参数,那么必须重新创建控制文件。
查看数据文件和重做日志文件
-
1,如果数据库中的所有控制文件和日志文件都已经丢失,数据亏已经无法打开,因此无法通过查询字典来获得数据文件和日志文件的信息,唯一的方法时查看警告日志文件中的内容。如果数据库可以被打开,那么:
SQL>select member from v$logfile; # 在数据字典视图查看日志文件 SQL>select name from v$datafile; # 在数据字典视图查看数据文件 SQL>select name from v$controlfile; # 在数据字典视图查看控制文件
-
2,关闭数据库,在system模式下使用SHUTDOWN IMMEDIATE命令。
-
3,用户需要在操作系统下面备份所有的数据文件和重做日志文件。
-
4,启动但不加载数据库,是因为在加载数据库时,实例会打开控制文件,无法达到新创建控制文件的效果。
SQL>startup nomount
-
5,创建新的控制文件
SQL>create controlfile reuse database "orcl" logfile group 1 'C:\xxx\xxx\....\REDO01.LOG', group 2 'C:\xxx\xxx\....\REDO02.LOG', group 3 'C:\xxx\xxx\....\REDO03.LOG' datafile 'C:\xxx\xxx\....\SYSTEM01.DBF', 'C:\xxx\xxx\....\SYSAUX01.DBF', 'C:\xxx\xxx\....\UNDOTBS01.DBF', 'C:\xxx\xxx\....\USERS01.DBF', 'C:\xxx\xxx\....\EXAMPLE01.DBF', 'C:\xxx\xxx\....\TBSP_1.DBF', 'C:\xxx\xxx\....\TBSP_2.DBF' maxlogfiles 50 maxlogmembers 3 maxinstances 6 maxdatafiles 200 noresetlogs noachivelog;
解释:上述代码中,DATABASE关键后面的数据库名要求与SPFILE文件中的DB_NAME参数值完全相同;NORESETLOGS选项表示仍然使用原有重做日志文件,如果不希望使用原有重做日志文件或者原有重做日志文件与控制文件一起丢失,则可以指定RESETLOGS选项;LOGFILE选项用于指定数据库原有重做日志的组号,大小以及对应的日志成员;DATAFILE选项用于指定数据库原有的数据文件。
-
6,编辑参数
介绍:通过编辑SPFILE文件中的初始化参数CONTROL_FILES,使其指向新建的控制文件,如果在控制文件中修改了数据库名称,还需要修改DB_NAME参数来指定新数据库名称。
SQL>alter system set control_files =
'C:\xxx\xxx\....\CONTROL01.CTL',
'C:\xxx\xxx\....\CONTROL02.CTL',
scope=spfile;
-
7,打开数据库
(1)如果丢失了某个重做日志文件或数据文件,则需要恢复数据库,否则通过下列方式正常打开数据即可:SQL>alter database open;
(2)如果在创建控制文件时使用RESETLOGS语句,则需要以"恢复方式"打开数据库,参考以下:
SQL>alter database open resetlogs;