实例与数据库

Oracle 里最容易混的是两件事:内存和进程组成的 实例,以及磁盘上的数据文件、控制文件、redo 组成的 数据库。实例可以起来但数据库没 open;数据库文件在,实例也可以不在。

先确认你连上了什么

示例环境一律用假名:appdb、PDB apppdb,主机 db-lab-01。不要照抄到生产。

SELECT instance_name, status, database_status, host_name
FROM v$instance;

SELECT name, open_mode, log_mode, cdb
FROM v$database;

SELECT con_id, name, open_mode
FROM v$pdbs;

statusSTARTED 只到 nomount,MOUNTED 读到了控制文件,OPEN 才能做业务。CDB 环境下还要看当前容器是 CDB$ROOT 还是某个 PDB。

内存先看这三块

  • SGA:缓冲、共享池、redo buffer
  • PGA:会话私有
  • 后台进程:DBWn、LGWR、CKPT、SMON、PMON 等
SELECT name, round(bytes/1024/1024) AS mb
FROM v$sgainfo
WHERE name IN ('Buffer Cache Size','Shared Pool Size','Redo Buffers','Maximum SGA Size');

动手时记住

启停、改参数、看等待,都是在操作 实例。丢文件、坏块、备份集,才是 数据库。两者搞反,会把问题定位到错误的层。

参考:Database Concepts 19c