oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1相关的知识,希望对你有一定的参考价值。

oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1出现错误
如图。
请教各位大虾是为什么呢?
DROP USER jz CASCADE;

用sys用户登录 删除。追问

效果一样,其实这个用户下已经没有东西了,还有一个表空间,也没有东西了,一样不让删除。
和你说一下我做过的操作:
这个用户一开始是个普通用户,我从另一个数据库中备份了一份数据,我想恢复到这个用户下,但用户名不一样,在DOS下用 imp fromuser=** touser=*** file=??? 的命令行进行恢复
系统提示:不能用没有DBA权限的用户恢复DBA权限用户备份的数据。
那我就给这个用户授予了DBA权限,并且,授予了默认DBA权限

追答

难道是这个用户已经不存在了,但是数据字典中还有它的信息?
你查询下数据字典。
select ... from dba_users 看有没有这个用户;
顺便删除下其它不重要的用户 看能不能删除。

看来这个问题有点小麻烦 我们QQ上聊或者百度hi

追问

这个表里还真有这个用户,直接从这个表中将这个用户删除掉可以不呢?

参考技术A 贴出你写的代码,看看追问

system 用户登录PLSQL,在users里右键菜单删除的。

执行DROP USER JZ CASCADE;语句,结果一样

oracle11g-linux 归档处理

在使用oracle时突然登录不上去了提示:ORA-00257:archiver error.Connect internal only,until freed.

查遍很多资料,都指向“归档日志空间不足导致”这一问题。查看磁盘空间提示磁盘已使用100%。看来就是这个问题了;

 

问题解决

  1.首先删除物理磁盘归档文件。(删除之前最好先备份)

  网上大多都说归档文件在archive目录下,但实际我找遍linux中,都没有找到这个目录。此时如果运气好,能够登录oracle,则可以进去通过命令:

[root@xxx~]# su - oracle
[oracle@xxx~]$ sqlplus /nolog
SQL> connect /as sysdba
SQL>show parameter recover;

 

此时大概能猜到归档文件的存放位置了,如果无法进入,或者上面方式还是找不到,那就通过linux磁盘空间大小,或者文件夹的格式搜索去查找吧

我的地址:

/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs

 

其中home为我的安装目录,顺便我的版本是11g,不通版本可能会有不同。

  2.把把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,接下去我们要做的就是这个工作

  使用oracle的rman命令清理:

[root@localhost dbs]# su - oracle
-bash-4.1$ rman target sysdba

 

查看归档文件:(文件已经删除,但是内存中还未删除的内容)

RMAN> list archivelog all;

 

检测归档:

RMAN> crosscheck archivelog all; 

 

删除归档:

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE \'SYSDATE-7\';

说明: SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。 同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库 DELETE ARCHIVELOG from TIME \'SYSDATE-7\'; 删除从7天前到现在的全部日志,慎用UNIX/LINUX下也可以通过FIND找到7天前的归档数据,使用EXEC子操作删除 find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ; 这样做仍然会在RMAN里留下未管理的归档文件 仍需要在RMAN里执行下面2条命令 crosscheck archivelog all; delete expired archivelog all; 所以还不如上面的方法好用,不过用FIND的好处就是,可以在条件上,和EXEC子项上做很多操作,实现更复杂的功能

另关于删除的其他动作

删除7天前的归档:

DELETE ARCHIVELOG ALL COMPLETED BEFORE \'SYSDATE-7\';

删除全部归档(noprompt不交互):

DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE \'SYSDATE-0\';

删除从7天前到现在的全部日志:

DELETE ARCHIVELOG FROM TIME \'SYSDATE-7\';

删除过期归档

 delete expired archivelog all;

 

 

到此 归档清理完成

 

 

 

 

 

关闭oracle归档

因测试环境,对oracle归档没有那么大的需求,且又消耗资源。故想办法关闭掉。

进入oracle:

-bash-4.1$ sqlplus / as sysdba

 

相机执行下面的操作

SQL> alter system set log_archive_start=false scope=spfile; #禁用自归档
SQL> shutdown immediate;
SQL> startup mount; #重启数据库到mount模式
SQL> alter database noarchivelog; #修改为非归档模式
SQL> alter database open; #打数据文件
SQL> archive log list; 搜索#再次查看前归档模式

 

完成

 

以上是关于oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1的主要内容,如果未能解决你的问题,请参考以下文章

myeclipse6.0 连接oracle10g的问题 ORA-00604,ORA-12705

(转)oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”

win7 安装Oracle10g,使用exp工具导出Oracle11g用户所有数据,报错信息提示EXP-00056: ORACLE-12154

Oracle 10G DBCA ORA-03113 ORA-27102

oracle 删除用户时提示用户不存在

oracle 删除用户时提示用户不存在