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

来源:互联网 发布:mac如何打开隐藏文件夹 编辑:程序博客网 时间:2024/04/28 08:05

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_00100GB),该逻辑卷挂载在/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”无法删除,其余2group则能删除。

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

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;

 

原创粉丝点击