簡體   English   中英

如何故意使Oracle 11g中的表無效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM