startup time을 안다는 건
instance의 startup time과database의 open time의 차이를 이해하는 것이 중요합니다.
v$instance 뷰에서 검색하는 startup_time은 startup이 시작된 시간입니다.
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> startup nomount;
SQL> select status, startup_time from v$instance;
STATUS STARTUP_TIME
------------ --------------------
STARTED 2021-09-15 23:39:30
STARTED는 nomount를 의미합니다.
control file을 mount 해봅시다.
SQL> alter database mount;
Database altered.
SQL> select status, startup_time from v$instance;
STATUS STARTUP_TIME
------------ --------------------
MOUNTED 2021-09-15 23:39:30
status는 mount로 바뀌었지만 startup_time은 nomount와 같은 것을 확인할 수 있습니다.
DB가 open된 시간을 알고 싶을 때는 dba_hist_database_instance 뷰를 이용합니다.
dba_hist_database_instance는 DB open time의 히스토리를 보여줍니다.
SQL> select startup_time open_time from dba_hist_database_instance order by 1 desc;
OPEN_TIME
--------------------
2021-09-15 23:48:23
2021-08-05 21:30:22
2020-12-16 01:54:17
2020-12-16 01:26:29
2020-08-10 01:55:13
2020-08-10 01:15:39
2020-07-22 03:56:15
10분 기다렸다가 DB open 후 dba_hist_database_instance 뷰의 startup_time 컬럼 최대값(가장 최근 시간)를 조회해봅시다.
SQL> alter database open;
Database altered.
SQL> column open_time format a20;
SQL> select max(startup_time) open_time from dba_hist_database_instance;
OPEN_TIME
--------------------
2021-09-15 23:48:23
참고 : https://logic.edchen.org/how-oracle-check-startup-time/