OGG DDL觸發器引發的故障系列(一)

夢夕林1992發表於2023-03-30

故障現象:

資料庫所有ddl操作無法成功,無法編譯任何包 包括 grant、alter、impdp/expdp、drop、truncate等操作。


排查步驟:

確認報錯

SQL> drop user test cascade;
drop user test cascade
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01950: no privileges on tablespace 'ODC_TPS'
ORA-06512: at line 999
ORA-01950: no privileges on tablespace 'ODC_TPS'
 
SQL> grant dba to odc;
grant dba to odc
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01950: no privileges on tablespace 'ODC_TPS'
ORA-06512: at line 999
ORA-01950: no privileges on tablespace 'ODC_TPS'

可以看到報錯, 沒有對 ODC_TPS表空間的許可權。

進一步檢查該表空間的資訊:

SQL> SELECT t.owner, t.segment_name,SUM(bytes)/1024/1024 From dba_segments t 
  2  WHERE t.tablespace_name = 'ODC_TPS'
  3  GROUP BY t.owner,t.segment_name
  4  ORDER BY SUM(bytes) desc;
OWNER                SEGMENT_NAME         SUM(BYTES)/1024/1024
-------------------- -------------------- --------------------
ODC                  GGS_MARKER                            104
ODC                  GGS_DDL_HIST                            8
ODC                  SYS_C0011139                            4
ODC                  GGS_MARKER_IND1                         2
ODC                  GGS_DDL_HIST_i4                       .25
ODC                  GGS_DDL_HIST_i2                     .1875
ODC                  GGS_DDL_HIST_i5                     .1875
ODC                  GGS_DDL_HIST_i6                      .125
ODC                  GGS_DDL_HIST_i3                      .125
ODC                  GGS_DDL_HIST_i1                      .125
ODC                  GGS_DDL_HIST_INDEX1                  .125
ODC                  GGS_DDL_HIST_ALT_u2                 .0625
ODC                  GGS_SETUP_UKEY                      .0625
ODC                  SYS_C0017453                        .0625
ODC                  GGS_CHECKPOINT                      .0625
ODC                  GGS_DDL_HIST_ALT_u3                 .0625
ODC                  GGS_SETUP                           .0625
ODC                  GGS_DDL_HIST_ALT_u1                 .0625
ODC                  GGS_DDL_HIST_ALT                    .0625

該表空間為ODC使用者所使用,且ODC為ogg的管理使用者,進一步確認是否開啟了ogg的DDL同步:

SQL> select OWNER,TRIGGER_NAME,STATUS from dba_triggers where TRIGGER_NAME='GGS_DDL_TRIGGER_BEFORE';
OWNER      TRIGGER_NAME                   STATUS
---------- ------------------------------ --------
SYS        GGS_DDL_TRIGGER_BEFORE         ENABLED

ogg的DDL觸發器存在且是enabled狀態,ogg是開啟ddl同步的。

 

安裝ogg軟體時,如果需要同步DDL操作,則需要安裝DDL的相關元件,安裝了DDL的元件後,就會在sys使用者下建立一個DDL觸發器,用來捕獲ddl操作並儲存到ogg管理使用者下的相應表中。

 

排查到這一步就已經比較明顯了,當資料庫中有ddl操作時,ddl的觸發器需要將這一操作記錄到odc使用者下的相關表中(所在的表空間是ODC_TPS),但是當前odc使用者在該表空間上沒有配額,導致以上報錯。

 

嘗試先將dba許可權給ogg的管理使用者,但是賦予許可權失敗,報錯如下:

SQL> grant dba to odc;
grant dba to odc
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01950: no privileges on tablespace 'ODC_TPS'
ORA-06512: at line 999
ORA-01950: no privileges on tablespace 'ODC_TPS'

看到相同的報錯。

嘗試給odc使用者賦許可權,由於賦許可權操作屬於ddl無法完成,所以要先禁用ogg的ddl觸發器,賦許可權後在開啟。

login as sysdba
SQL>alter trigger GGS_DDL_TRIGGER_BEFORE disable;
SQL>alter user odc quota unlimited on odc_tps;
SQL>alter trigger GGS_DDL_TRIGGER_BEFORE enable;

賦許可權後即可進行ddl、編譯等操作,問題解決。

 

參考文件:

DDL fails because of GoldenGate DDL trigger with error: ORA-01950: no privileges on tablespace ( 文件  ID 1513413.1)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29956245/viewspace-2942627/,如需轉載,請註明出處,否則將追究法律責任。

相關文章