[英]How do I invalidate a table in Oracle 11g on purpose?
我正在寫一個小查詢來查找Oracle中的無效表:
select * from user_tables where status != 'VALID'
為了進行測試,我認為最好創建一個表並將其故意作廢。 有沒有辦法做到這一點?
使視圖無效很容易,只需刪除基礎表之一即可。
任何提示歡迎。
您不會在user_tables
看到狀態為INVALID ,但是會在[USER|ALL|DBA]_OBJECTS
視圖中看到狀態。
一種簡單的方法是使用對象類型創建表,然后強制對象類型屬性 無效 。
例如,
SQL> CREATE OR REPLACE TYPE mytype AS OBJECT(col1 VARCHAR2(10))
2 /
Type created.
SQL>
SQL> CREATE TABLE t(col1 NUMBER,col2 mytype)
2 /
Table created.
SQL>
SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
2 /
OBJECT_NAME OBJECT_TYPE STATUS
----------- ----------------------- -----------
T TABLE VALID
SQL>
因此,該表現在處於VALID狀態 。 讓我們使其無效 :
SQL> ALTER TYPE mytype ADD ATTRIBUTE col2 NUMBER INVALIDATE
2 /
Type altered.
SQL>
SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
2 /
OBJECT_NAME OBJECT_TYPE STATUS
----------- ----------------------- -----------
T TABLE INVALID
SQL>
它是一個老問題,但我想為將來的讀者指出一些問題,狀態user_tables中的有效對立是UNUSABLE
因此,如果您想使表UNUSABLE
,則DROP TABLE操作由於oracle doc而失敗
如果先前的DROP TABLE操作失敗,則指示該表是不可用的(UNUSABLE)還是有效的(VALID)
至於user_objects中的INVALID
類型,它主要與views/package/procedure
有關,但是lalit kumar給出了一個表無效的很好的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.