5.1 修改数据库日志文件
任务说明
数据库安装完成后,需要修改数据库日志文件,提高数据库性能。
操作指引
修改数据库日志文件操作步骤如下:
步骤 1 以 oracle 用户登录节点。
$ sqlplus "/as sysdba"
步骤 3 修改回滚日志组和回滚日志文件。
SQL> select count(*) from v$transaction;
正常情况下,屏幕显示类似如下信息。
COUNT(*)
----------
0
− 如果显示的值不为“ 0 ”,需要杀掉相关事务进程,执行子步骤 2 ~ 3 。
− 如果显示的值为 0 ,直接执行子步骤 4 。
SQL> select p.SPID from v$session s,v$process p where s.PADDR=p.ADDR and s.SID in (select s.sid From v$transaction t,v$session s where t.addr=s.taddr);
正常情况下,屏幕显示类似如下信息。
SPID
------------
24509
706
16329
21467
19335
“ SPID ”即为查询到的事务进程 ID ,如屏显信中的信息中的“ 24509 ”、“ 706 ”、“ 16329 ”、“ 21467 ”和“ 19335 ”。
SQL> exit
$ kill SPID
然后执行子步骤 1 ,查看事务进程是否去全部杀掉。
SQL> alter system set undo_tablespace='tbs_undo' sid='wisgrpt';
正常情况下,屏幕显示如下信息。
System altered.
5. 使原 undotbs1 回滚表空间脱机并删除
SQL> alter tablespace undotbs1 offline;
正常情况下,屏幕显示如下信息。
Tablespace altered.
SQL> drop tablespace undotbs1;
正常情况下,屏幕显示如下信息。
Tablespace dropped.
6. 创建回滚日志组。
按安装规划,回滚日志存放在逻辑卷 db_lv_00 ( 100GB ),该逻辑卷挂载在 /opt/oracle/oredodata 下,需要根据逻辑卷 db_lv_00 实际大小调整 SIZE 。
SQL> alter database add logfile group 4('/opt/oracle/redodata/ redo01.rdo') SIZE 20G ;
SQL> alter database add logfile group 5('/opt/oracle/redodata/ redo02.rdo') SIZE 20G ;
SQL> alter database add logfile group 6('/opt/oracle/redodata/ redo03.rdo') SIZE 20G ;
SQL> alter database add logfile group 7('/opt/oracle/redodata/ redo04.rdo') SIZE 20G ;
SQL> alter database add logfile group 8('/opt/oracle/redodata/ redo05.rdo') SIZE 20G ;
由于创建的回滚日志组的空间比较大,需要 2 分钟左右才能创建完成一个日志组。
正常情况下,屏幕显示如下信息。
Database altered.
如果创建过程中出现,以下错误:
ORA-19502: 文件 "/opt/oracle/redoata/redo06.rdo", 块编号 1873921 ( 块大小 =512)
上出现写入错误
ORA-27072: 文件 I/O 错误
可能是逻辑卷空间不够,执行 df –h 查看“ /opt/oracle/redoata ”剩余空间大小,根据现场实际情况修改日志文件大小( SIZE )。
7. 切换日志文件。
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
正常情况下,屏幕显示类似如下信息。
System altered.
8. 删除系统自带的回滚日志组。
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;
正常情况下,屏幕显示类似如下信息。
Database altered.
如果在删除时,出现以下错误:
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01624: 日志 1 是紧急恢复实例 wisgrpt ( 线程 1) 所必需的
ORA-00312: 联机日志 1 线程 1: '/opt/oracle/oradata/wisgrpt/redo01.log'
请参考“ 异常处理 ”进行处理。
步骤 4 重新启动数据库。
SQL> shutdown immediate
SQL> startup
步骤 5 检查日志组和日志文件修改是否成功。
$ cd /opt/oracle/redodata
$ ls -l
正常情况下,屏幕显示类似如下信息。
drwx------ 2 oracle dba 16384 2009-01-08 14:40 lost+found/
-rw-r----- 1 oracle dba 8589935104 2009-01-12 22:16 redo01.rdo
-rw-r----- 1 oracle dba 8589935104 2009-01-13 15:28 redo02.rdo
-rw-r----- 1 oracle dba 8589935104 2009-01-12 21:55 redo03.rdo
-rw-r----- 1 oracle dba 8589935104 2009-01-12 21:55 redo04.rdo
-rw-r----- 1 oracle dba 8589935104 2009-01-12 21:55 redo05.rdo
---- 结束
如果在删除统自带的回滚日志组时,出现以下错误:
alter database drop logfile group 1
*
ERROR at line 1:
ORA-01624: 日志 1 是紧急恢复实例 wisgrpt ( 线程 1) 所必需的
ORA-00312: 联机日志 1 线程 1: '/opt/oracle/oradata/wisgrpt/redo01.log'
是因为当前日志组正在被 Oracle 数据库软件使用,请按以下步骤处理:
步骤 1 查看日志文件状态。
SQL> select * from v$log;
当其“ STATUS ”为“ CURRENT ”或“ ACTIVE ”时,不能删除。如下屏显信息中, group1 的“ STATUS ”为“ CURRENT ”无法删除,其余 2 个 group 则能删除。
正常情况下,屏幕显示类似如下信息。
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV
---------- ---------- ---------- ---------- ---------- ------
STATUS FIRST_CHANGE# FIRST_TIME
-------------------------------- ------------- --------------
1 1 30 52428800 1 NO
CURRENT 1795442 12-1 月 -09
2 1 28 52428800 1 NO
INACTIVE 1782428 12-1 月 -09
3 1 29 52428800 1 NO
INACTIVE 1795439 12-1 月 -09
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV
---------- ---------- ---------- ---------- ---------- ------
STATUS FIRST_CHANGE# FIRST_TIME
-------------------------------- ------------- --------------
4 1 23 8589934592 1 NO
INACTIVE 1782412 12-1 月 -09
5 1 24 8589934592 1 NO
INACTIVE 1782420 12-1 月 -09
6 1 25 8589934592 1 NO
INACTIVE 1782422 12-1 月 -09
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIV
---------- ---------- ---------- ---------- ---------- ------
STATUS FIRST_CHANGE# FIRST_TIME
-------------------------------- ------------- --------------
7 1 26 8589934592 1 NO
INACTIVE 1782424 12-1 月 -09
8 1 27 8589934592 1 NO
ACTIVE 1782426 12-1 月 -09
8 rows selected.
步骤 2 再次切换日志组,查看日志组状态。
SQL> alter system switch logfile;
SQL> select * from v$log;
步骤 3 直到 group1 的“ STATUS ”为“ INATIVE ”删除日志组。
SQL> alter database drop logfile group 1 ;