欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

oracle数据库导出ORA

程序员文章站 2022-04-26 10:18:07
...

错误类型及描述: expdp 导出表在表分析是开始出现报错。 ORA-39127: unexpected error from call to export_string :=SYS.DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_INFO_EXP('CAPTURE_QUEUE_T_ALL1','STRMADMIN',1,1,'11.02.00.00.00',newblock) ORA-01403: no da

错误类型及描述:

expdp 导出表在表分析是开始出现报错。
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_INFO_EXP('CAPTURE_QUEUE_T_ALL1','STRMADMIN',1,1,'11.02.00.00.00',newblock)
ORA-01403: no data found
ORA-01403: no data found
ORA-06512: at "SYS.DBMS_AQ_SYS_EXP_ACTIONS", line 123
ORA-06512: at "SYS.DBMS_AQ_EXP_QUEUE_TABLES", line 20
ORA-06512: at line 1
ORA-06512: at "SYS.DBMS_METADATA", line 9081

错误原因

1、用户SYS用户事物处于无效状态
2、用户SYS用户的事物被删除

3、存在无效的object

4、以前做过的流复制没有清理干净,残留下来的很多垃圾导致的无效object.

解决方法:

1、DELETE FROM exppkgact$ WHERE SCHEMA='EXFSYS';

2、用TOAD登入数据库,然后删除无效的object.

3、删除残余的流复制垃圾

Object Owner Cleanup
Log in as the user who owns the queue_table. (This username will replace the value where referred to below.)

Within sqlplus


SQL> SELECT object_name, object_type FROM user_objects WHERE object_name like '%%';
where is replaced with the appropriate value.
Depending on what parts of the queue table remain you could see a number of different objects.

SELECT object_name, object_type FROM user_objects
WHERE object_name like '%ALL1%' or object_name like '%ALL3%' or object_name like '%ALL2%';

1. Drop any views associated with via drop view ... .
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL1_R;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL1;
DROP VIEW AQ$_CAPTURE_QUEUE_T_ALL1_F;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL1_S;


DROP VIEW AQ$CAPTURE_QUEUE_T_ALL2_R;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL2;
DROP VIEW AQ$_CAPTURE_QUEUE_T_ALL2_F;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL2_S;


DROP VIEW AQ$CAPTURE_QUEUE_T_ALL3_R;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL3;
DROP VIEW AQ$_CAPTURE_QUEUE_T_ALL3_F;
DROP VIEW AQ$CAPTURE_QUEUE_T_ALL3_S;

2. Drop any sequences associated with via drop sequence ... .
drop sequence AQ$_CAPTURE_QUEUE_T_ALL1_N;
drop sequence AQ$_CAPTURE_QUEUE_T_ALL2_N;
drop sequence AQ$_CAPTURE_QUEUE_T_ALL3_N;


3. ALTER SESSION SET EVENTS '10851 trace name context forever, level 2';


4. DROP TABLE CASCADE CONSTRAINTS;
DROP TABLE CAPTURE_QUEUE_T_ALL1 CASCADE CONSTRAINTS;
DROP TABLE CAPTURE_QUEUE_T_ALL2 CASCADE CONSTRAINTS;
DROP TABLE CAPTURE_QUEUE_T_ALL3 CASCADE CONSTRAINTS;


5. Repeat for all the following tables
DROP TABLE AQ$__ CASCADE CONSTRAINTS;
where is replaced by the appropriate value.


DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_H CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_G CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_C CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_D CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_I CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_S CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_T CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_L CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL1_P CASCADE CONSTRAINTS;


DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_H CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_G CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_C CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_D CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_I CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_S CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_T CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_L CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL2_P CASCADE CONSTRAINTS;


DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_H CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_G CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_C CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_D CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_I CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_S CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_T CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_L CASCADE CONSTRAINTS;
DROP TABLE AQ$_CAPTURE_QUEUE_T_ALL3_P CASCADE CONSTRAINTS;

SYSTEM User Cleanup
connect as system
1. SELECT schema, name, objno FROM SYSTEM.AQ$_QUEUE_TABLES WHERE name LIKE '%%';
take a note of the schema, objno, and name, for the relevant schema, if any is returned.


SELECT schema, name, objno FROM SYSTEM.AQ$_QUEUE_TABLES WHERE name IN ('CAPTURE_QUEUE_T_ALL1','CAPTURE_QUEUE_T_ALL2','CAPTURE_QUEUE_T_ALL3')


2. SELECT oid, eventid, table_objno, name FROM SYSTEM.AQ$_QUEUES WHERE name IN ('','',....) ;
take a note of the oids, table_objnos and names. The oid values, i.e, OID_1, etc., eventid and names, e.g. QUEUE_NAME_1, etc., will be used in the Data Dictionary Cleanup div.


SELECT oid, eventid, table_objno, name FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') ;


3. DELETE FROM SYSTEM.AQ$_QUEUE_TABLES where objno=;


DELETE FROM SYSTEM.AQ$_QUEUE_TABLES where objno IN (SELECT objno FROM SYSTEM.AQ$_QUEUE_TABLES WHERE name IN ('CAPTURE_QUEUE_T_ALL1','CAPTURE_QUEUE_T_ALL2','CAPTURE_QUEUE_T_ALL3')
)


4. DELETE FROM SYSTEM.AQ$_QUEUES WHERE table_objno=;


DELETE FROM SYSTEM.AQ$_QUEUES WHERE table_objno IN (SELECT table_objno FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') );


commit;


Data Dictionary Cleanup
connect as sys as sysdba


Find the owner# corresponding to the relevant from


select distinct o.owner# from obj$ o, user$ u where o.owner#=u.user# and u.name='';
This result will be referred to a in the statements below.


select distinct o.owner# from obj$ o, user$ u where o.owner#=u.user# and u.name='STRMADMIN';


86


Then


1. (a) and (b) are valid for all versions. (c) and (d) are valid only for
9.2.0.1 and above.






Queues (type#24)
(a) SELECT obj#,name FROM SYS.OBJ$ where type# ='24' AND owner# = AND name IN ('','',....);
where , etc., are those found from the select of queue names.


SELECT obj#,name FROM SYS.OBJ$ where type# ='24' AND owner#='86'
and name in('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E')


Rule Sets (type#46)
(b) SELECT obj#,name FROM SYS.OBJ$ WHERE type#=46 AND owner# = AND name LIKE '%QUEUE_NAME_1%';
where , etc., are those found from the select of queue names.


SELECT obj#,name FROM SYS.OBJ$ where type# =46 AND owner#=86
and name in('CAPTURE_QUEUE_ALL1_N','CAPTURE_QUEUE_ALL1_R','CAPTURE_QUEUE_ALL2_N','CAPTURE_QUEUE_ALL2_R','CAPTURE_QUEUE_ALL3_N','CAPTURE_QUEUE_ALL3_R')


Rules (type#59)
(c) SELECT obj#,name FROM SYS.OBJ$ WHERE type#=59 AND owner# = AND name LIKE '%QUEUE_NAME_1%';
where , etc., are those found from the select of queue names.


SELECT obj#,name FROM SYS.OBJ$ WHERE type#=59 AND owner# = 86 AND ctime >= to_date('20131124','yyyymmdd') and ctime order by ctime


Evaluation Context (type#=62)
(d) SELECT obj#,name FROM SYS.OBJ$ WHERE type#=62 AND owner# = AND name LIKE '%QUEUE_TABLE_NAME%';
where is that found previously.


SELECT obj#,name FROM SYS.OBJ$ WHERE type#=62 AND owner# = 86 AND name IN('AQ$_CAPTURE_QUEUE_T_ALL1_V','AQ$_CAPTURE_QUEUE_T_ALL2_V','AQ$_CAPTURE_QUEUE_T_ALL3_V');




(b) DELETE FROM SYS.OBJ$ WHERE obj# IN (, , ...);
where , etc are all the obj# found from Step 1 (a).


DELETE FROM SYS.OBJ$ WHERE OBJ# IN (SELECT obj# FROM SYS.OBJ$ where type# ='24' AND owner#='86'
and name in('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E')
)


Using the name values for Step 1 (c) above
execute DBMS_RULE_ADM.DROP_RULE('.',TRUE);


SELECT 'execute DBMS_RULE_ADM.DROP_RULE(''' || 'STRMADMIN.' || name || ''',TRUE);' FROM SYS.OBJ$ WHERE type#=59 AND owner# = 86 AND ctime >= to_date('20131124','yyyymmdd') and ctime order by ctime
类似:
execute DBMS_RULE_ADM.DROP_RULE('STRMADMIN.CWREPORT_NAME74761',TRUE);




Using the name values for Step 1 (d) above
--如果无法清除,报错ORA-24170的错误,则执行下面的语句后再清除:
--ALTER SESSION SET EVENTS = '25475 TRACE NAME CONTEXT FOREVER, LEVEL 2';


execute DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT('STRMADMIN.AQ$_CAPTURE_QUEUE_T_ALL1_V',TRUE);
execute DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT('STRMADMIN.AQ$_CAPTURE_QUEUE_T_ALL2_V',TRUE);
execute DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT('STRMADMIN.AQ$_CAPTURE_QUEUE_T_ALL3_V',TRUE);




3. DELETE FROM SYS.EXPACT$ WHERE owner='' AND name LIKE '%%';
4. DELETE FROM SYS.EXPACT$ WHERE owner='' AND name LIKE '%%';
5. DELETE FROM SYS.NOEXP$ WHERE owner='' AND name LIKE '%%';
6. DELETE FROM SYS.NOEXP$ WHERE owner='' AND name LIKE '%%';


commit;


select * from SYS.NOEXP$ WHERE owner='STRMADMIN' AND NAME IN ('AQ$_CAPTURE_QUEUE_T_ALL1_D','AQ$_CAPTURE_QUEUE_T_ALL1_P','AQ$_CAPTURE_QUEUE_T_ALL2_D','AQ$_CAPTURE_QUEUE_T_ALL2_P','AQ$_CAPTURE_QUEUE_T_ALL3_D','AQ$_CAPTURE_QUEUE_T_ALL3_P')


DELETE from SYS.NOEXP$ WHERE owner='STRMADMIN' AND NAME IN ('AQ$_CAPTURE_QUEUE_T_ALL1_D','AQ$_CAPTURE_QUEUE_T_ALL1_P','AQ$_CAPTURE_QUEUE_T_ALL2_D','AQ$_CAPTURE_QUEUE_T_ALL2_P','AQ$_CAPTURE_QUEUE_T_ALL3_D','AQ$_CAPTURE_QUEUE_T_ALL3_P')
commit;


Propagation Cleanup [Optional]
1. DELETE FROM SYS.AQ$_SCHEDULES WHERE oid IN ('', ....);
where the values are those obtained from the SYSTEM Cleanup stage.


SELECT * FROM SYS.AQ$_SCHEDULES WHERE oid IN (SELECT oid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') );


DELETE FROM SYS.AQ$_SCHEDULES WHERE oid IN (SELECT oid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') );




2. DELETE FROM SYS.AQ$_MESSAGE_TYPES WHERE queue_oid IN ('', ....);
where the values are those obtained from the SYSTEM Cleanup stage.


SELECT * FROM SYS.AQ$_MESSAGE_TYPES WHERE queue_oid IN (SELECT oid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') );


DELETE FROM SYS.AQ$_MESSAGE_TYPES WHERE queue_oid IN (SELECT oid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E') );


3. SELECT MIN(sequence), MAX(sequence) from SYS.AQ$_PROPAGATION_STATUS WHERE queue_id IN ('eventid', ....);
where the values are those obtained from the SYSTEM Cleanup stage.


SELECT * from SYS.AQ$_PROPAGATION_STATUS WHERE queue_id IN (SELECT eventid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E'));


SELECT MIN(sequence), MAX(sequence) from SYS.AQ$_PROPAGATION_STATUS WHERE queue_id IN (SELECT eventid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E'));


4. DELETE FROM SYS.AQ$_PROPAGATION_STATUS WHERE queue_id IN ('', ....);
where the values are those obtained from the SYSTEM Cleanup stage.


DELETE FROM SYS.AQ$_PROPAGATION_STATUS WHERE queue_id IN (SELECT eventid FROM SYSTEM.AQ$_QUEUES WHERE name IN ('CAPTURE_QUEUE_ALL1','CAPTURE_QUEUE_ALL2','CAPTURE_QUEUE_ALL3','AQ$_CAPTURE_QUEUE_T_ALL1_E','AQ$_CAPTURE_QUEUE_T_ALL2_E','AQ$_CAPTURE_QUEUE_T_ALL3_E'));


5. DELETE FROM SYS.AQ$_PENDING_MESSAGES WHERE sequence BETWEEN (, where , are the minimum and maximum sequence values found in step 3.




commit;


EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_0_GA1');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_1_GY1');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_1_GY2');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_1_GY3');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_2_LPS1');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_2_LPS2');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_2_LPS3');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_4_TR1');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_4_TR2');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_4_TR3');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_8_QDN1');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_8_QDN2');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_8_QDN3');
EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('PROPAGATION_9_QN1');


exec DBMS_RULE_ADM.DROP_RULE_SET(rule_set_name =>'CAPTURE_QUEUE_ALL2_R' ,delete_rules =>true );
exec DBMS_RULE_ADM.DROP_RULE_SET(rule_set_name =>'CAPTURE_QUEUE_ALL2_N' ,delete_rules =>true );


ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';


Event 10046 trace is disabled at session level using
ALTER SESSION SET EVENTS '10046 trace name context off';

ALTER SESSION SET EVENTS '10851 trace name context off';
ALTER SESSION SET EVENTS '25475 trace name context off';

进过以上处理后,expdp就不会出错了。