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