2017-05-25 78 views
2

我有兩個表:交換分區後推遲放置表

ld_tbl - 分區表。

tgt_tabl - 非分區表。

在我的計劃,我執行

alter table ld_tbl exchange partition prt with table tgt_table; 

和交換後已經完成,我執行拖放到ld_tbl

的問題是,如果有人通過tgt_tabl發射查詢它拋出異常:

ORA-00813:對象不再存在

即使我滴只有ld_tbl和沒」觸摸tgt_tabl。經過多次測試後,我確定這是導致異常的下降。根據這些信息:Object no longer exists,解決方案是推遲下降。

我的問題是:放置和交換之間需要多少時間?我怎麼知道像drop這樣的操作不會傷害其他表?

謝謝。 「下降和交換之間需要多少時間?」

回答

0

「下降和交換之間需要多少時間?」

相關的問題是,爲什麼有人在TGT_TABL上運行查詢。如果我正確理解您的情況,那是一個瞬態表,用於通過分區交換加載數據。因此,沒有商業用戶應該查詢它們(他們應該等到數據在分區表中生效)。

如果查詢來自非業務用戶(DBA,支持人員),我的建議是繼續像現在這樣做,然後發送電子郵件給那些解釋爲什麼他們偶爾會得到ORA-00813錯誤的人。

如果查詢來自業務用戶,那麼它更困難。推遲下降沒有任何意義,因爲只要您計劃了,有人可能會運行查詢。您需要跟蹤正在運行這些查詢的用戶,瞭解他們爲什麼要這樣做,並確定是否有其他方式來滿足需求。

但我不認爲有技術上的問題可以申請。通過使用分區交換,您已經最小化了可能發生此錯誤的窗口。

+0

APC,謝謝你的回答。我會盡力解釋。在標準交換分區語句中,目標是將沒有分區的表中的所有數據移動到具有分區的表中。在我的情況下是不同的。我沒有一個真正的數據需要在其中的分區表。我只想將數據從加載表切換到目標。所以最好的方法是像1分區一樣創建加載表 - 匹配所有行,並將此全行分區與目標表交換。所以交換完成後我不需要加載表。這就是爲什麼我想放棄它。 – user2671057

+0

關於這個問題本身 - 如果我通過交換聲明正確的話,這些表格有共同的關係。所以當你放棄其中一個時,可能會導致第二個訪問異常。也許我錯了,但我認爲這不是關於用戶查詢表的時間。用戶查詢只會引起注意。但是爲什麼一個表的下降會導致另一個表異常?因爲交流......所以我認爲我會將其推向前進...... – user2671057