这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
Linux与Windows操作类似,Windows在cmd界面操作。
下面关闭数据库 syd。
1. 停止连入数据库的相关业务
尽量关闭所有连接数据库点的应用程序,客户端等,否则关库时可能存在等待。
2. 关闭监听,连入需要关闭的数据库实例
--确认服务器上有几个实例
lsnrctl status
--确认完成后关闭监听
lsnrctl stop
--指定要关闭的实例,只有一个实例的可忽略此步骤
export ORACLE_SID=syd
--进入数据库,再次确认所要关闭的数据库实例名
sqlplus / as sysdba
show parameter name
3. 确认数据库无勒索病毒
以下 sql 查询后无结果返回证明无病毒,若有返回结果,及时联系 dba,切勿关库。
select 'DROP TRIGGER ' || owner || '."' || TRIGGER_NAME || '";'
from dba_triggers
where TRIGGER_NAME like 'DBMS_%_INTERNAL% '
union all
select 'DROP PROCEDURE ' || owner || '."' || a.object_name || '";'
from dba_procedures a
where a.object_name like 'DBMS_%_INTERNAL% ';
select owner, object_name, created
from dba_objects
where object_name like 'DBMS_SUPPORT_DBMONITOR%';
4. 确认数据库运行时间
查询结果为数据库运行时间,若超过一年,长时间未重启过数据库,需跟客户说明存在风险。(硬件老化,数据库需重启生效参数被改动等,都可能引起数据库重启后起不来)
select to_char(startup_time, 'DD-MON-YYYY HH24:MI:SS') starttime,
TRUNC(sysdate - (startup_time)) || 'days' ||
TRUNC(24 *
((sysdate - startup_time) - TRUNC(sysdate - startup_time))) ||
'hours' || MOD(TRUNC(1440 * ((SYSDATE - startup_time) -
TRUNC(sysdate - startup_time))),
60) || 'min' ||
MOD(TRUNC(86400 *
((SYSDATE - STARTUP_TIME) - TRUNC(SYSDATE - startup_time))),
60) || 's' running
from v$instance;
5. 切几次归档,确保已提交的事务记录到归档日志中
alter system switch logfile;
/
/
6. 创建检查点,确保数据写入到磁盘中
alter system checkpoint;
7. 关闭数据库
若步骤 1 未操作完全,或直接在业务运行时关闭数据库,关库时可能很慢(业务频繁的库,关库操作一两个小时都有可能),所以关库时一定要提前规划好停业务时间来停止相关业务。
shu immediate