记录Oracle删除重建企业级数据库(SDE)过程中遇到的问题

背景说明:同事在删除表的时候不小心删除了SDE下面的所有表,因当时未发现,到发现的时候数据已经无法恢复,导致系统中的空间数据均无法打开,无奈下只能查找备份数据,重建SDE后进行数据恢复。

环境:Windows Server2012   Oracle11.2.0.4   ArcGIS10.5

操作步骤是删除SDE用户以及表空间后,通过Toolbox重新创建企业级数据库(如果不先进行删除,创建时会提示已经存在)。

1、在Oracle中删除SDE用户时,提示ORA-00604 ORA-00942错误。

删除语句如下:

drop user sde cascade;
drop tablespace sde including contents and datafiles ;

执行用户删除时提示错误:

image

网上查找了很多资料,都是根据要求查看日志,找到具体报错信息后具体分析。

通过下面语句可以开启日志(注意这个语句和执行DROP的语句要使用同一个会话窗口),具体命令可以查看alter session set events命令。

alter session set sql_trace=true;
alter session set events'10046 trace name context forever,level 4';

说明:10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息,即帮助我们解析一条/多条SQL、PL/SQL语句的运行状态。

再次执行DROP语句,执行完成后关闭sql_trace追踪

drop user sde cascade;
alter session set sql_trace=false;

到Oracle安装目录下找到生成的日志文件,查看具体错误信息。

可以通过下面命令找到当前session跟踪文件位置:

select
a.value || '/' || b.instance_name || '_ora_' || c.spid || '.trc' trace_file
from
(select value from v$parameter where name= 'user_dump_dest') a,
(select instance_name from v$instance) b,
(select spid from v$process where addr=(select paddr from v$session where sid=(select distinct sid from v$mystat))) c;

或者

select tracefile from v$process where addr=(select paddr from v$session where sid=(select distinct sid from v$mystat));

我这里的路径为:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_11584.trc

根据时间以及命令找到相关日志信息:

image

可以看到其实际执行了一系列的Delete操作,在删除SDO_GEOM_METADATA_TABLE时候,找不到该表出错。表SDO_GEOM_METADATA_TABLE是Oracle Spatial用到的表,我们可以通过catmd.sql(路径:D:\app\Administrator\product\11.2.0\dbhome_1\md\admin)脚本重新创建该表即可。

执行方法可以在PLSQL命令框中输入@,回车选择执行文件即可,执行完成后执行DROP命令成功完成删除。

2、创建企业级数据库时,提示Oracle Text package is not installed.

image

看提示内容是渠道号Oracle text包导致,Oracle text为全文检索技术,其为Oracle的一个组件,提供了强大的全文检索功能。

我们安装根据要求安装一下Oracle text即可。

需要在DBA下执行catctx.sql脚本(路径:D:\app\Administrator\product\11.2.0\dbhome_1\ctx\admin),执行方法如下:

@?/ctx/admin/catctx.sql change_on_install SYSAUX TEMP NOLOCK

其中 change_on_install可以换做自己设置的密码。

执行完成后,登录可以通过下面语句查看安装是否成功

select comp_name, status, substr(version,1,10) as version from dba_registry where comp_id = 'CONTEXT';
image

后面可以正常创建企业级数据库。


posted on 2023-01-03 17:50  jingkunliu  阅读(232)  评论(0编辑  收藏  举报

导航