记录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 ;
执行用户删除时提示错误:
网上查找了很多资料,都是根据要求查看日志,找到具体报错信息后具体分析。
通过下面语句可以开启日志(注意这个语句和执行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
根据时间以及命令找到相关日志信息:
可以看到其实际执行了一系列的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.
看提示内容是渠道号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';
后面可以正常创建企业级数据库。
posted on 2023-01-03 17:50 jingkunliu 阅读(232) 评论(0) 编辑 收藏 举报