查看一下对象SYSDBMS_DEFER_IMPORT_INTERNAL是否存在
select object_type,object_name from dba_objects where object_name like 'DBMS_DEFER_IMPORT%';
存在的可能性比较大
如果存在,应该是你导出时那个用户权限丢失了,你需要给他们权限,假设你导出是用system用户
grant exp_full_database to system;
grant execute on SYSDBMS_DEFER_IMPORT_INTERNAL to system;
再重新导出试一下
我觉得你导出时用的不是system用户
1关闭oracle所有的服务。可以在windows的服务管理器中关闭;
2打开注册表:regedit 打开路径:
这一步中,可以用到我们在注册表清理软件一文中介绍的一款及其方便查找路径的小软件。Registry Manager
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务!
3打开注册表,找到路径:
HKEY_LOCAL_M
非常不建议将系统用户下的对象以DMP方式进行数据迁移和导入,容易引起数据库的错误甚至是数据库瘫痪。
很多数据内容都是数据库的实时状态及环境信息等,且在使用状态,你说学校的环境可行,也不是一点错误问题都没有,只是学校机器硬件软件环境相同,没有造成严重后果罢了。
进行数据迁移,不要迁移系统表空间下的内容。
在一个表上定义的触发器里是不能再对这个表DML的,应该改成这样:
create trigger STAFF_CHANGEPASS
BEFORE INSERT OR UPDATE OF PASSWORD ON STAFFS
FOR EACH ROW
declare
NEXT_KEY number;
begin
SELECT NVL(MAX(KEYID),0)+1 into NEXT_KEY FROM STAFF_HISTORYPASS;
insert into STAFF_HISTORYPASS (KEYID,STAFF_ID,CHANGEDATE,password)
values (NEXT_KEY ,:newSTAFF_ID,sysdate,:newpassword);
--改动位置在下面一行
:newPASSCHANGEDATE:=sysdate;
END STAFF_CHANGEPASS;
Begin
SysDbms_JobIsubmit(Job => 10,
What => 'insertSysDate;',
Next_Date => Sysdate,
Interval => 'sysdate+1/1440');
Commit;
End;
--JOB号10 是自己指定的,也可以指定其他不存在的随便一个不超过1000的数字。
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。
2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
以上就是关于oracle备份空表数据时候报错全部的内容,包括:oracle备份空表数据时候报错、oracle11gR2启动报错,高手速来帮我解决一下急急急急急急急急急!~、像oracle中导入dmp格式数据库问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)