ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...
原文出處:http://blog.csdn.net/wyzxg/archive/2010/09/10/5874726.aspx
undo表空間故障特殊恢復(二)------ORA-01092: ORACLE 實例終止。強制斷開連接
這個測試的是instance recover(單實例里就是crash recovery)的恢復需要故障undo里的數(shù)據(jù),
一般的情況instance recover使用聯(lián)機日志文件的,當發(fā)生多版本更新的故障,也可需要回滾段數(shù)據(jù)的。
測試表
SQL> select count(1) from tabtest;
COUNT(1)
----------
17732
SQL> insert into tabtest select * from tabtest where rownum<2001;
已創(chuàng)建2000行。
SQL> insert into tabtest select * from tabtest where rownum<2001;
已創(chuàng)建2000行。
模擬斷電故障,讓回滾段的數(shù)據(jù)沒來得回滾,使回滾段在數(shù)據(jù)庫關閉時,保留未commit的事務
SQL> shutdown abort
ORACLE 例程已經(jīng)關閉。
SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 斷
開
只有退出sqlplus環(huán)境,才能更改回滾段數(shù)據(jù)文件,刪除回滾數(shù)據(jù)文件,模擬回滾段丟失
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 9月 9 22:23:50 2010
Copyright (c) 1982, 2007, Oracle.??All Rights Reserved.
已連接到空閑例程。
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01157: 無法標識/鎖定數(shù)據(jù)文件 2 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數(shù)據(jù)文件 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS13.DBF'
錯誤出現(xiàn)了,因為我已經(jīng)刪除文件“E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS13.DBF”
SQL> shutdown abort;
ORACLE 例程已經(jīng)關閉。
這里startup force是模擬instance recover時需要回滾段里的數(shù)據(jù)情況,為什么能模擬出來,我也不清楚,我是經(jīng)過多次測試發(fā)現(xiàn)的,哪位高人知道原因,請指點????
SQL> startup force;
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01157: 無法標識/鎖定數(shù)據(jù)文件 2 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數(shù)據(jù)文件 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS13.DBF'
SQL> alter database datafile 2 offline drop;
數(shù)據(jù)庫已更改。
SQL> alter database open;
alter database open
*
第 1 行出現(xiàn)錯誤:
ORA-01092: ORACLE 實例終止。強制斷開連接
這里instance recover需要回滾段里數(shù)據(jù),但是回滾段丟失,所以實例出現(xiàn)異常直接關閉
SQL> startup
ORA-24324: 未初始化服務句柄
ORA-01041: 內(nèi)部錯誤, hostdef 擴展名不存在
SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 斷
開
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 9月 9 22:27:05 2010
Copyright (c) 1982, 2007, Oracle.??All Rights Reserved.
已連接到空閑例程。
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
ORA-01092: ORACLE 實例終止。強制斷開連接
SQL>
在看看alertlog文件,錯誤信息如下:
。。。。
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_smon_1828.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS13.DBF'
Thu Sep 09 22:27:17 2010
Errors in file e:\oracle\product\10.2.0\admin\test\udump\test_ora_3844.trc:
ORA-00604: 遞歸 SQL 級別 1 出現(xiàn)錯誤
ORA-00376: 此時無法讀取文件 2
ORA-01110: 數(shù)據(jù)文件 2: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS13.DBF'
Error 604 happened during db open, shutting down database
USER: terminating instance due to error 604
Thu Sep 09 22:27:17 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_pmon_5952.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_reco_3988.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_ckpt_5320.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_lgwr_1312.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_mman_4972.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_dbw0_4060.trc:
ORA-00604: error occurred at recursive SQL level
Thu Sep 09 22:27:18 2010
Errors in file e:\oracle\product\10.2.0\admin\test\bdump\test_psp0_1276.trc:
ORA-00604: error occurred at recursive SQL level
Instance terminated by USER, pid = 3844
ORA-1092 signalled during: ALTER DATABASE OPEN...
。。。。。
根據(jù)錯誤信息知道回滾段數(shù)據(jù)故障會丟失,如果有備份的話,直接recover datafile 很簡單就可以恢復,這里假設沒有備份,
那該如何處理呢?現(xiàn)在因為回滾段數(shù)據(jù)文件的故障,導致數(shù)據(jù)庫無法打開,那我們想辦法讓數(shù)據(jù)庫的檢查繞過或修復回滾段數(shù)
據(jù)文件,數(shù)據(jù)庫open時,所有的數(shù)據(jù)文件都要online,如果不能online,那就要恢復或者直接把數(shù)據(jù)文件drop掉。我們這里沒有
備份不能恢復,那就drop掉故障的數(shù)據(jù)文件,然后讓數(shù)據(jù)可以打開,然后在重新創(chuàng)建新的回滾段表空間,讓數(shù)據(jù)庫使用新的回滾段
表空間,最后在把有故障的回滾段表空間刪除。這是解決問題的基本思路。操作步驟如下:
修改參數(shù)文件 ,添加隱含參數(shù)
我這里只用了“_corrupted_rollback_segments”
在文本參數(shù)文件inittest.ora的最后追加如下一條記錄
*._corrupted_rollback_segments=( _SYSSMU12$,_SYSSMU13$,_SYSSMU14$,_SYSSMU15$,_SYSSMU16$,_SYSSMU17$,_SYSSMU18$,_SYSSMU19$,_SYSSMU20$,_SYSSMU11$)
SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 斷
開
C:\Documents and Settings\Administrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.4.0 - Production on 星期四 9月 9 22:32:43 2010
Copyright (c) 1982, 2007, Oracle.??All Rights Reserved.
已連接到空閑例程。
SQL> startup??pfile='E:\oracle\product\10.2.0\db_1\database\inittest.ora'
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
現(xiàn)在數(shù)據(jù)庫已經(jīng)打開, 剩下就簡單多了,創(chuàng)建新的回滾段表空間,刪除故障回滾段表空間
SQL>
SQL> show parameter undo
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
undo_management? ?? ?? ?? ?? ?? ?? ? string? ?? ?AUTO
undo_retention? ?? ?? ?? ?? ?? ?? ???integer? ???900
undo_tablespace? ?? ?? ?? ?? ?? ?? ? string? ?? ?UNDOTBS1
SQL> create undo tablespace undotbs4 datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\
TEST\UNDOTBS41.DBF' size 50m ;
表空間已創(chuàng)建。
SQL> show parameter undo
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
undo_management? ?? ?? ?? ?? ?? ?? ? string? ?? ?AUTO
undo_retention? ?? ?? ?? ?? ?? ?? ???integer? ???900
undo_tablespace? ?? ?? ?? ?? ?? ?? ? string? ?? ?UNDOTBS1
SQL> alter system set undo_tablespace='undotbs4' scope=spfile;
alter system set undo_tablespace='undotbs4' scope=spfile
*
第 1 行出現(xiàn)錯誤:
ORA-32001: 已請求寫入 SPFILE, 但是在啟動時未指定 SPFILE
SQL> alter system set undo_tablespace='undotbs4';
系統(tǒng)已更改。
SQL>
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
SQL> startup??pfile='E:\oracle\product\10.2.0\db_1\database\inittest.ora'
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
檢查當前使用回滾段情況
SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME? ?? ?? ?? ?? ?? ? STATUS? ?? ?? ???TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM? ?? ?? ?? ?? ?? ?? ?? ? ONLINE? ?? ?? ???SYSTEM
_SYSSMU1$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU2$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU3$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU4$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU5$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU6$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU7$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU8$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU9$? ?? ?? ?? ?? ?? ?? ? NEEDS RECOVERY? ?UNDOTBS1
_SYSSMU10$? ?? ?? ?? ?? ?? ?? ?NEEDS RECOVERY? ?UNDOTBS1
SEGMENT_NAME? ?? ?? ?? ?? ?? ? STATUS? ?? ?? ???TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
_SYSSMU11$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU12$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU13$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU14$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU15$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU16$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU17$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU18$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU19$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU20$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
已選擇21行。
SQL> select * from v$recover_file;
FILE# ONLINE??ONLINE_
---------- ------- -------
ERROR? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
2 OFFLINE OFFLINE
FILE NOT FOUND? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 0
8 OFFLINE OFFLINE
16898701
07-9月 -10
FILE# ONLINE??ONLINE_
---------- ------- -------
ERROR? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
SQL> show parameter undo
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
undo_management? ?? ?? ?? ?? ?? ?? ? string? ?? ?AUTO
undo_retention? ?? ?? ?? ?? ?? ?? ???integer? ???900
undo_tablespace? ?? ?? ?? ?? ?? ?? ? string? ?? ?UNDOTBS4
SQL> drop tablespace undotbs4 including contents and datafiles;
drop tablespace undotbs4 including contents and datafiles
*
第 1 行出現(xiàn)錯誤:
ORA-30013: 還原表空間 'UNDOTBS4' 當前正在使用中
SQL>
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
再用修改文本參數(shù)文件,添加隱含參數(shù)
在文本參數(shù)文件inittest.ora的最后追加如下一條記錄
*._corrupted_rollback_segments=( _SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU1$)
啟動數(shù)據(jù)庫
SQL> startup??pfile='E:\oracle\product\10.2.0\db_1\database\inittest.ora'
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> drop tablespace undotbs1 including contents and datafiles;
表空間已刪除。
SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME? ?? ?? ?? ?? ?? ? STATUS? ?? ?? ???TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM? ?? ?? ?? ?? ?? ?? ?? ? ONLINE? ?? ?? ???SYSTEM
_SYSSMU11$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU12$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU13$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU14$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU15$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU16$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU17$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU18$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU19$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU20$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
已選擇11行。
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
SQL> startup??pfile='E:\oracle\product\10.2.0\db_1\database\inittest.ora'
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
查看如下都正常了吧
SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME? ?? ?? ?? ?? ?? ? STATUS? ?? ?? ???TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM? ?? ?? ?? ?? ?? ?? ?? ? ONLINE? ?? ?? ???SYSTEM
_SYSSMU11$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU12$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU13$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU14$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU15$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU16$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU17$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU18$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU19$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
_SYSSMU20$? ?? ?? ?? ?? ?? ?? ?ONLINE? ?? ?? ???UNDOTBS4
已選擇11行。
SQL> select count(1) from tabtest;
COUNT(1)
----------
21732
SQL> create spfile from pfile;
文件已創(chuàng)建。
SQL> create spfile from pfile;
文件已創(chuàng)建。
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關閉。
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area??574619648 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1297944 bytes
Variable Size? ?? ?? ?? ? 234881512 bytes
Database Buffers? ?? ?? ? 331350016 bytes
Redo Buffers? ?? ?? ?? ?? ? 7090176 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL>
已經(jīng)恢復ok
說明:
其實在恢復數(shù)據(jù)庫后的善后工作很重要,不要留尾巴。做事要認真些,完美些,不要留下遺憾。細節(jié)很重要
善后處理:
0. 檢查數(shù)據(jù)庫、實例的狀態(tài)(v$instance,v$database),確認是否還有其他文件恢復(v$recover_file)
1. 檢查是否有無效的對象定義
2. 檢查是否有失效的索引
3. 查看應用腳本是否正常
4。檢查系統(tǒng)是否有死鎖
5. 檢查系統(tǒng)的各資源是否正常
6. 查看系統(tǒng)log、alertlog、tracelog等文件
----end-----
[本帖最后由 wyzxg 于 2010-9-10 00:49 編輯]
總結(jié)
以上是生活随笔為你收集整理的ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 职场妈妈该怎么理财?职场妈妈必看的理财建
- 下一篇: 显示三维图片序列_SLAM结合三维检测