实例与数据库
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;
看 status:STARTED 只到 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');
动手时记住
启停、改参数、看等待,都是在操作 实例。丢文件、坏块、备份集,才是 数据库。两者搞反,会把问题定位到错误的层。