在虚拟机上安装了oracle 11g数据库,就是为了自己平时做实验什么的,今天上午想把数据库设置为归档模式下运行,结果搞出问题了,整了一个多小时才搞定,不过这个过程还是蛮有意思的,记录下来和大家分享,不足之处,欢迎大家批评指正。
将一个数据库设置为归档模式一般要经过以下几个步骤:
(1)设置归档目录:
md C:\oracle\archive1
md C:\oracle\archive2
(2)设置参数命名第(1)步中创建的两个目标目录,并控制归档日志文件名:(以sys用户连接)
alter system set log_archive_dest_1='location=C:\oracle\archive1' scope=spfile;
alter system set log_archive_dest_2=’location=C:\oracle\archive2’ scope=spfile;
alter system set log_archive_format=’arch_%d_%t_%r_%s.log’ scope=spfile;
(3)干净的关闭数据库:
Shutdown immediate
(4)以加载模式启动数据库:
startup mount
(5)将数据库转换成归档日志模式:
Alert database archivelog;
(6)打开数据库:
Alter database open;
(7)确认数据库为归档日志模式,并用下列两个查询运行归档器:
Select log_mode from v$database;
Select archiver from v$instance;
按照上述步骤我在设置数据库归档时,在第二步中,在设置归档日志文件名称时,自己写错了,写成如下了:
alter system set log_archive_format=’arch_%d_%t_%s.log’ scope=spfile;
将%r参数给丢了,但是数据的数据库给出的提示是:“系统已更改。”
这一步并没有给出错误提示,所以没有注意丢东西了。接下来是干净的关闭数据库,这一步也没有问题,然后以加载模式启动数据库,这个时候出问题了,问题提示如下:
ORA-19905: log_archive_format must contain %s, %t and %r
这说明是设置归档文件名称时缺少了%r导致的,log_archive_format参数设置归档日志文件的名称是在文件名称中添加了一些动态的参数,防止文件重名被覆盖,其中%s表示日志切换序列号,%t表示线程号,%r表示场景号;现在数据库已经干净关闭了,然而spfile又出了问题,数据库已经无法启动了,现在想再重新设置这个参数已经不可能了(看来oracle这一点做的还是不够好啊,如果参数设置出现问题了,应该在设置时就提示设置错误,在设置的时候没有给出提示,而是在启动的时候提示参数错误)。
在网上查了一下资料只能通过init.ora文件重建spfile文件来解决这个问题了,在数据库安装目录中搜索到init.ora.062013114010(我理解这个应该是init.ora的备份文件,不知道正确不,所以后面的数字每个机器应该是不同的,要所要按照init.ora匹配搜索)文件,找到这个文件后,执行命令,创建spfile文件:
create spfile from pfile='C:\app\Administrator\admin\orcl\pfile\init.ora.062013114010';
尝试启动数据库:startup
启动结果如下:
ORACLE 例程已经启动。
Total System Global Area 431038464 bytes
Fixed Size 1375088 bytes
Variable Size 264242320 bytes
Database Buffers 159383552 bytes
Redo Buffers 6037504 bytes
ORA-00214: ???? ''C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL'' ?? 1726 ???
''C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL'' ?? 1713 ???
数据库已经可以启动了,但是出现了ora-00214错误,这个是控件文件的错误,在设置归档之前我曾经设置过数据库控制文件的多路复用,现在重新设置一下控制文件的位置:
alter system set control_files="C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01
.CTL","C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL02.CTL" scope=spfile;
这个时候再关闭重新启动一下数据库试试,终于搞定了:
ORACLE 例程已经启动。
Total System Global Area 431038464 bytes
Fixed Size 1375088 bytes
Variable Size 268436624 bytes
Database Buffers 155189248 bytes
Redo Buffers 6037504 bytes
数据库装载完毕。
数据库已经打开。
虽然问题是搞定了,但是还是有一个问题没有搞明白,在重新创建spfile文件之后尝试启动数据库为什么会出现控制文件的错误,另外在错误提示中的
ORA-00214: ???? ''C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL'' ?? 1726 ???
''C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL'' ?? 1713 ???
两个位置的控制文件都是存在的,而且是建库时系统创建的控制文件,内容肯定没错,但是为什么还是会报错,这个和我以前调整过数据库控制文件参数有关系吗?欢迎大家解答、指正。