美创科技技术社区

注册

 

发新话题 回复该主题

oracle10g转11g迁移数据时需要注意的一个小细节 [复制链接]

1#

oracle10g转11g迁移数据时需要注意的一个小细节

因为是小机转X86

所以不能使用RMAN的方式,使用expdp进行逻辑的导入导出

在将数据导入之后编译无效对象后使用PL\SQL进行连接测试,

发现仍出现创建索引的SQL语句执行失败

查询之后发现oracle11g相比于oracle10g,不能再创建具有重复列的索引函数了

解决方法:将改重复的索引函数增加别名,再重新执行

1、  先来看11g的情况:

2、  非函数索引如果具有重复的列是不允许创建的:

3、  srcbdb@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
    create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
                                              *
    ERROR at line 1:
    ORA-00957: duplicate column name

    11g里面即使是函数索引,但是具有重复的列也是不允许创建的:

    srcbdb@VIP>   create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
      create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'))
                                                                         *
    ERROR at line 1:
    ORA-54015: Duplicate column expression was specified

2、再来看10g的情况

10g里面非函数索引如果具有重复的列也是不允许创建的:
    dgut@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
    create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
                                              *
    ERROR at line 1:
    ORA-00957: duplicate column name

    在10g里面如果是函数索引,即使是具有重复的列,索引依然能创建成功:
    dgut@VIP> create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
    Index created.

虽然创建具有重复列的函数索引没什么意义,甚至更差,但是这个11g10g的使用差别挺有意思的就记录了下来,只能说11g更严谨了。

分享 转发
TOP
发新话题 回复该主题