为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8 20250122
【操作系统】:openEuler24.03
【CPU】: x64
【问题描述】*:
我有两个数据库 版本都是 DM8-20250122
现在我从A库中使用dexp导出了一个用户APP下的模式APP,文件名为APP.dmp
然后再B库中创建用户FPP,将APP.dmp导入进去,我的命令如下
dimp USERID=SYSDBA/xxxxxxx@192.168.xxx.xx:5236 FILE=/home/dmdba/install/APP.dmp LOG=APP.log REMAP_SCHEMA=APP:FPP DIRECTORY=/home/dmdba/install/
然后的我的很多视图就出现了编译错误
本质是remap不对劲
下面是不对的视图
为啥还带原来的模式名????
如果我在B库中创建的用户和A库同名就没这个问题。
但是如果错不应该全错么???为啥部分对部分错呢???
这个我在低版本也遇到过,达梦那边压根就不管这个事情
REMAP_SCHEMA=A:B只针对实体对象。
视图、函数、存储过程等是需要保持原定义的,这个在任何数据库上是一样的。
针对该场景的建议
1.尽量保持导出导入的模式一致
2.如导出导入模式可能存在变更,建议视图等对象创建时不带模式
3.如当前存在上述情况时,可以通过SQL脚本去全量替换
例如如下
--T1.表示新导入的用户名
--1表示从第一个字符开始
--0替换所有匹配项
--'i' —— 匹配时不区分大小写
--OBJECT_TYPE 可以根据需要添加
--OWNER则表示需要替换的对象所在用户
select REGEXP_REPLACE(DBMS_METADATA.GET_DDL(OBJECT_TYPE,OBJECT_NAME,OWNER),'SYSDBA\.','T1.',1,0,'i') from DBA_OBJECTS WHERE
OBJECT_TYPE IN ('VIEW') and OWNER='T1'
目前配置模式映射后,只将模式名进行映射,sql里如果存在模式名,可能没法做到替换