您好,欢迎访问一九零五行业门户网

ORA-01948和ORA-04052错误的解决方法

一、事件背景: 业务人员在创建一个物化视图的时候,报了以下错误: sqlgt; create materialized view mv_retail_wbmout_r 2 t
一、事件背景:
业务人员在创建一个物化视图的时候,报了以下错误:
sql> create materialized view mv_retail_wbmout_r
 2 tablespace sapdata
 3 pctused 0
 4 pctfree 10
 5 initrans 2
 6 maxtrans 255
 7 storage (
 8 initial 64k
 9 next 1m
 10 minextents 1
 11 maxextents unlimited
 12 pctincrease 0
 13 buffer_pool default
 14 flash_cache default
 15 cell_flash_cache default
 16 )
 17 nocache
 18 logging
 19 nocompress
 20 noparallel
 21 build deferred
 22 refresh complete on demand
 23 with rowid
 24 as
 25 select record_code from wbm_store_out_record@mysql
create materialized view mv_retail_wbmout_r
*
第 1 行出现错误:
ora-04052: 在查找远程对象 datachk.wbm_store_out_record@oto 时出错
ora-01948: 标识符的名称长度 (31) 超过最大长度 (30)
其中wbm_store_out_record@mysql是远程mysql数据库上面的一个表,通过透明网关进行访问;
二、查找metalink的资料,整理如下
2.1 症状
line # = 0 column # = 0 error text = ora-04052: error occurred when looking up remote object oracle.v_stg_gendgen@dblink
ora-01948: identifier's name length (31) exceeds maximum (30)
this occurs even though the sql server table name is less than 30 characters.
a query of the remote table via sqlplus does not produce the error. however, running an anonymous block from sqlplus does produce the error:
error starting at line 1 in command:
declare
v_count integer;
begin
select count(*) into v_count from oracle.v_stg_gendgen@dblink ;
end;
error report:
ora-04052: error occurred when looking up remote object oracle.v_stg_gendgen@ray
ora-01948: identifier's name length (31) exceeds maximum (30)
04052. 00000 - error occurred when looking up remote object %s%s%s%s%s
*cause: an error has occurred when trying to look up a remote object.
*action: fix the error. make sure the remote database system has run
kglr.sql to create necessary views used for querying/looking up
objects stored in the database.
通过透明网关可以进行相应的select,但是诸如创建物化视图的时候,就会报相应的列长度报错;
2.2 原因
当通过透明网关访问远程的ms、mysql数据库时,当这些表中有任意的一列长度大于30个字符的时候就会报这个错误;
2.3 解决方法
方法一、根据报错的内容,列的长度大于30个字符会报错,修改相应列的长度小于30个字符即可(当系统已经上线后,一些字段可能都被引用到了应用,所以这个时候修改列的名称有一定的风险,不建议使用)
方法二、创建一个视图,所有列的名称长度都不超过30个字符即可(推荐使用)
因为我们的系统已经上线了,避免出现没必要的问题,,直接创建一个视图即可;
oracle 单实例 从32位 迁移到 64位 方法 
在centos 6.4下安装oracle 11gr2(x64)
oracle 11gr2 在vmware虚拟机中安装步骤
debian 下 安装 oracle 11g xe r2
oracle rac 11.2(12c)正确关闭顺序
本文永久更新链接地址:
其它类似信息

推荐信息