Oracle/MariaDB 상태 점검 가이드
Oracle과 MariaDB 상태 점검을 서비스, 접속, 세션, 락, 저장공간, 오류 로그, 백업 검증, 복제 상태 기준으로 나누어 정리한 운영 가이드입니다.
Oracle과 MariaDB 상태 점검은 단순히 프로세스가 떠 있는지만 보는 작업이 아닙니다. 서비스 기동 상태, 접속 가능 여부, 세션/락, 저장공간, 오류 로그, 백업 검증, 복제 상태까지 나누어 확인해야 실제 운영 장애를 놓치지 않습니다. Oracle과 MariaDB를 각각 운영 점검 관점에서 볼 수 있도록 명령과 SQL을 분리해 정리합니다.
공통 점검 순서
- OS에서 DB 프로세스와 포트가 살아 있는지 확인합니다.
- DB 클라이언트로 실제 접속이 되는지 확인합니다.
- 인스턴스 상태, 세션, 락, 저장공간, 오류 로그를 확인합니다.
- 백업 또는 논리/물리 검증 명령은 운영 부하를 고려해 수행합니다.
- 복제나 클러스터 구성이 있으면 primary/replica 역할과 지연 시간을 따로 확인합니다.
Oracle 점검
1. OS 프로세스와 리스너 확인
ps -ef | egrep 'pmon|tnslsnr' | grep -v grep
lsnrctl statusora_pmon_<SID> 프로세스가 보이면 해당 SID의 Oracle 인스턴스가 떠 있는 것입니다. 리스너가 떠 있어도 DB 인스턴스가 down이면 애플리케이션 접속은 실패할 수 있으므로 둘을 따로 봅니다.
2. SQL*Plus 접속과 기본 상태
sqlplus / as sysdbaSET LINESIZE 200
SET PAGESIZE 100
SELECT banner FROM v$version;
SELECT instance_name, host_name, status, database_status, startup_time FROM v$instance;
SELECT name, open_mode, database_role, log_mode FROM v$database;v$instance.status가 OPEN인지, v$database.open_mode가 READ WRITE 또는 의도한 standby 상태인지 확인합니다.
3. Tablespace 사용률
SELECT
df.tablespace_name,
ROUND(df.bytes / 1024 / 1024) AS total_mb,
ROUND((df.bytes - NVL(fs.bytes, 0)) / 1024 / 1024) AS used_mb,
ROUND(NVL(fs.bytes, 0) / 1024 / 1024) AS free_mb,
ROUND((df.bytes - NVL(fs.bytes, 0)) / df.bytes * 100, 2) AS used_pct
FROM
(SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df
LEFT JOIN (SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
ORDER BY used_pct DESC;사용률이 높다고 바로 datafile을 늘리기보다 autoextend 설정, filesystem/ASM 여유 공간, 증가 추이를 같이 확인합니다.
4. 세션과 락 확인
SELECT username, status, COUNT(*) AS sessions
FROM v$session
WHERE username IS NOT NULL
GROUP BY username, status
ORDER BY sessions DESC;
SELECT
s.sid,
s.serial#,
s.username,
s.status,
s.event,
s.seconds_in_wait,
s.blocking_session
FROM v$session s
WHERE s.blocking_session IS NOT NULL
ORDER BY s.seconds_in_wait DESC;blocking session이 있으면 바로 kill하기 전에 어떤 SQL과 업무 배치가 잡고 있는지 확인합니다.
SELECT s.sid, s.serial#, s.username, q.sql_text
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.sid = <SID>;5. Alert log 확인
adrci exec="show homes"
adrci exec="set homepath diag/rdbms/<db_name>/<instance_name>; show alert -tail 100"Alert log에서는 ORA-, checkpoint 지연, archiver 오류, datafile 오류, listener registration 문제를 중점적으로 봅니다.
6. DBVERIFY와 RMAN 검증
dbv file=/path/to/datafile.dbfrman target /RUN {
ALLOCATE CHANNEL ch1 TYPE DISK;
BACKUP VALIDATE CHECK LOGICAL DATABASE;
RELEASE CHANNEL ch1;
}RMAN validate는 운영 DB에 I/O 부하를 줄 수 있으므로 업무 피크 시간에는 피하고, 백업 정책과 함께 정기적으로 검증하는 방식이 좋습니다.
MariaDB 점검
1. 서비스와 포트 확인
systemctl status mariadb --no-pager
ss -tnlp | grep -E ':3306\\b'
mysqladmin -u root -p pingmysqld is alive가 나오면 프로세스와 기본 접속은 되는 상태입니다. 다만 애플리케이션 계정 권한 문제, 특정 DB lock, replication 지연은 별도로 확인해야 합니다.
2. 기본 상태와 접속 수
mysqladmin -u root -p status
mysqladmin -u root -p processlistSHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW VARIABLES LIKE 'max_connections';
SHOW FULL PROCESSLIST;운영 스크립트에서 비밀번호를 명령줄에 직접 넣으면 프로세스 목록이나 쉘 히스토리에 노출될 수 있습니다. 자동화가 필요하면 socket 인증 또는 root-only 권한의 option file을 우선 검토하고, 민감값은 공개 문서나 Git 저장소에 남기지 않습니다.
sudo install -m 600 /dev/null /root/.my.cnf
sudo vi /root/.my.cnf[client]
user=root
socket=/var/lib/mysql/mysql.sockmysqladmin --defaults-extra-file=/root/.my.cnf status비밀번호 인증이 필요한 환경에서는 클라이언트가 prompt로 입력받게 하거나, 운영 환경의 secret 관리 절차에 맞춰 별도 주입합니다.
3. DB 크기와 테이블 상태
SELECT
table_schema,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;mysqlcheck -u root -p --check --all-databases
mysqlcheck -u root -p --check database_name table_namemysqlcheck --repair는 스토리지 엔진과 장애 상황에 따라 위험할 수 있습니다. 특히 InnoDB에서는 무작정 repair를 실행하지 말고 백업, 오류 로그, 테이블스페이스 상태를 먼저 확인합니다.
4. InnoDB 상태와 lock 확인
SHOW ENGINE INNODB STATUS\\G
SELECT * FROM information_schema.innodb_trx\\G
SELECT * FROM information_schema.innodb_lock_waits\\GSHOW ENGINE INNODB STATUS에서는 deadlock, row lock wait, buffer pool, checkpoint age를 확인합니다. DB가 느릴 때는 CPU보다 lock wait이 원인인 경우가 많습니다.
5. Replication 사용 시 확인
SHOW SLAVE STATUS\\GMariaDB 버전에 따라 replica 용어와 명령이 달라질 수 있습니다. 기존 환경에서는 SHOW SLAVE STATUS\G가 많이 쓰이며, 확인 포인트는 다음과 같습니다.
Slave_IO_Running과Slave_SQL_Running이 모두Yes인지 확인합니다.Seconds_Behind_Master가 계속 증가하면 복제 지연입니다.Last_IO_Error,Last_SQL_Error에 오류가 있는지 확인합니다.
6. 오류 로그 확인
journalctl -u mariadb --since "1 hour ago" --no-pager
# 배포판/설정에 따라 경로가 다를 수 있음
sudo tail -n 200 /var/log/mariadb/mariadb.log 2>/dev/null || true
sudo tail -n 200 /var/log/mysql/error.log 2>/dev/null || true운영 중 주의할 점
- DB가 느리다고 바로 서비스를 재시작하면 lock, long transaction, replication 오류 증거가 사라질 수 있습니다.
- 테이블 손상 의심 시 repair보다 백업 확보와 오류 로그 확인이 먼저입니다.
- Oracle RMAN validate, MariaDB mysqlcheck는 I/O 부하를 만들 수 있으므로 실행 시간대를 조정합니다.
- DB 비밀번호를 명령줄, 블로그, 문서, 채팅에 평문으로 남기지 않습니다.
- 상태 점검 결과는 시간과 함께 저장해야 전후 비교가 가능합니다.
빠른 점검 명령 모음
# Oracle
ps -ef | egrep 'pmon|tnslsnr' | grep -v grep
lsnrctl status
sqlplus / as sysdba
# MariaDB
systemctl status mariadb --no-pager
mysqladmin -u root -p ping
mysqladmin -u root -p processlist
journalctl -u mariadb --since "1 hour ago" --no-pager