Oracle关库缓一步慢一步(oracle关库很慢)

Oracle关库:缓一步慢一步

在Oracle数据库中,关闭数据库是一个非常关键的操作。如果不正确地关闭数据库,会导致数据丢失、损坏甚至无法恢复。本文将分享如何正确地关闭Oracle数据库,以及在关库时可能遇到的一些问题及解决方法。

一、Oracle数据库的关闭方式

Oracle数据库的关闭方式主要有两种:正常关闭和紧急关闭。

1. 正常关闭

正常关闭可以通过SQL语句、SQL Developer、Enterprise Manager等多种方式进行。其中SQL语句的关闭语句如下:

SHUTDOWN IMMEDIATE;

这条语句会立即关闭数据库,并且会回滚所有未提交的事务,并且已提交的事务也将被写入磁盘。这种关闭方式是最安全、最可靠的方式。

另外,还有一种正常关闭方式:SHUTDOWN TRANSACTIONAL。这种方式会等待所有未提交的事务提交或回滚完后才关闭数据库。这种方式适用于需要保证所有修改都被写入磁盘的情况。

2. 紧急关闭

紧急关闭一般用于无法使用正常关闭方式关闭数据库的情况,比如数据库出现了严重的故障或者无响应。紧急关闭时要使用以下语句:

SHUTDOWN ABORT;

这条语句会强制关闭数据库,会导致未提交的事务丢失,已提交的事务不会写入磁盘。

二、关库时可能出现的问题及解决方法

1. 关闭数据库速度过慢

在执行SHUTDOWN IMMEDIATE语句时,如果数据库中存在大量未提交的事务或者其他长时间运行的任务,将导致关闭时间非常长,甚至可能超时。此时需要使用以下语句:

ALTER SYSTEM CHECKPOINT;

这条语句会将所有未提交的事务强制写回磁盘,从而加快关闭速度。

2. 关闭数据库失败

在执行SHUTDOWN IMMEDIATE语句时,如果数据库不能正常关闭,可能会导致关闭失败。此时可以使用以下步骤:

1)查询数据库中所有的会话及所占的资源

SELECT

s.sid,

s.serial#,

s.username,

s.status,

s.osuser,

s.machine,

s.module,

s.program,

s.TYPE,

s.logon_time,

s.last_call_et,

s.sql_id,

p.spid,

p.pid,

ltrim(rpad(p.program,48), ‘ ‘) AS process_name,

sum(VALUE / 1024 / 1024) as mem_usage_mb

FROM

v$session s,

v$process p,

v$sesstat t,

v$statname n

WHERE

t.statistic# = n.statistic#

AND s.sid = t.sid

AND s.paddr = p.addr

AND n.name like ‘%session%’

GROUP BY

s.sid,

s.serial#,

s.username,

s.status,

s.osuser,

s.machine,

s.module,

s.program,

s.TYPE,

s.logon_time,

s.last_call_et,

s.sql_id,

p.spid,

p.pid,

ltrim(rpad(p.program,48), ‘ ‘)

ORDER BY

1;

2)关闭所有的会话

ALTER SYSTEM KILL SESSION ‘sid,serial#’;

sid和serial#可以在查询结果中找到。如果要关闭所有会话:

ALTER SYSTEM DISCONNECT SESSION ‘sid,serial#’ IMMEDIATE;

3. 数据库无法打开

在关闭数据库后,如果在启动时遇到“ORA-01113: file 1 needs media recovery”的错误,表示数据库无法打开,需要进行恢复。以下是恢复步骤:

1)使用以下命令打开数据库:

STARTUP MOUNT;

2)进行恢复:

RECOVER DATABASE;

3)恢复完成后,使用以下命令打开数据库:

ALTER DATABASE OPEN;

四、总结

无论是正常关闭还是紧急关闭,都要谨慎操作,避免数据丢失、损坏等情况。在关闭数据库时,要充分考虑系统的负载及当前的状况,进行合理的关闭方式,避免出现问题。如果出现问题,要及时处理,保证数据的安全。


数据运维技术 » Oracle关库缓一步慢一步(oracle关库很慢)