小旭的技术博客

博观而约取, 厚积而薄发.

[Oracle] DBA管理之"中止事务和修改日志回滚组"

5.1 修改数据库日志文件

任务说明

数据库安装完成后,需要修改数据库日志文件,提高数据库性能。

操作指引

修改数据库日志文件操作步骤如下:

                                步骤 1      oracle 用户登录节点。

                                步骤 2      连接数据库。

$ sqlplus "/as sysdba"

                                步骤 3      修改回滚日志组和回滚日志文件。

1.          检查数据库当前事务。

SQL> select count(*) from v$transaction;

正常情况下,屏幕显示类似如下信息。

  COUNT(*)

----------

          0

       如果显示的值不为“ 0 ”,需要杀掉相关事务进程,执行子步骤 2 ~ 3

       如果显示的值为 0 ,直接执行子步骤 4

2.          查看事务进程 ID

 

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 ”。

3.          杀死事务进程。

SQL> exit

$ kill SPID

然后执行子步骤 1 ,查看事务进程是否去全部杀掉。

4.          切换回滚表空间。

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 ;

 

阅读更多
个人分类: Oracle
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭