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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 一、事件背景:业务人员在创建一个物化视图的时候,报了以下错误:SQL> CREATE MATERIALIZED VIEW MV_RETAIL_wbmout_R 2 TABLESPACE SAPDATA 3 PCTUSED 0 ...

一、事件背景:

业务人员在创建一个物化视图的时候,报了以下错误:

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个字符即可(推荐使用)

 

因为我们的系统已经上线了,避免出现没必要的问题,直接创建一个视图即可;

*********************************************************************************************************************

本文作者:JOHN QQ:1916066696 (请备注数据库)

ORACLE技术博客:ORACLE 猎人笔记 http://blog.itpub.net/12679300/

请扫描加微信号!

********************************************************************************************************

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Oracle 关系型数据库
【ora 错误及解决方法】ORA-01652
ORA-01652:unable to extend temp segment by num in tablespace name 产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一旦没有足够的可分配空间或者分配不连续就会出现上述的现象。
1247 0
|
关系型数据库 数据库 Windows
|
Oracle 网络协议 关系型数据库
|
关系型数据库 Oracle Linux
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
|
XML 数据库 数据格式
|
SQL Oracle 关系型数据库
ORA-04030错误
ORA-04030错误 诊断并解决 ORA-4030 错误 (文档 ID 1548826.1) 适用于: Oracle Database - Enterprise Edition - 版本 8.
1655 0