数据泵逻辑迁移后sequence的唯一冲突

前言

总结一个老生常谈的话题,利用数据泵执行逻辑导入时,经常会碰到sequence发生唯一冲突的问题,本文总结解决方式

原因

impdp执行导入时,按顺序先导入sequence(假定此时currval是100)而后导入表,但如果在这之间有人向表中插入数据或其它方式导致sequence被调用,导致此时currval增加到1000。数据导入完成后,sequence是从100开始取值,而100-1000的sequence已经被占用,导致唯一冲突


解决方式:

1.在dest端 drop掉sequence,从source端获取sequence的元数据到dest重新创建

2.数据库至于RESTRICT SESSION模式下,执行导出

3.将SEQUENCE的CACHE设置为一个较大的值,确保导出序列和导出表数据之前的时间内,序列CACHE的值不会被用完,这就保证了导入后不会出现序列值的NEXTVAL小于表中已有数据的情况



时间: 2024-08-24 17:56:57

数据泵逻辑迁移后sequence的唯一冲突的相关文章

使用数据泵+dblink迁移数据库,适用于本地空间不足的情况

col name for a40 select name,locks,pins from v$db_object_cache where locks > 0 and pins > 0 and type='PROCEDURE'; 10.21.1.20 和10.24.51.11两个数据库的dblibk已经建好了,主要就impdp就可以了,一共需要导出 drop user ILEARN_TRA cascade; drop user ILA_SAP cascade; drop user ILEARN_

LOB对象在数据泵导出、导入后查询对象数量发现丢失

问题描述:问题:源库的某个Schema使用数据泵Expdp元数据整体导出,在目标库导入且成功后,逻辑验证用户对象,发现缺失.分析查询后,缺失的对象,都是LOB类型(并不是所有的LOB都无法导入,是大部分LOB类型的对象) #以下逻辑验证,SQL执行,对比源库.目标库数据#以下语句特点:测试环境,还原状况模拟:数据无法完全重现 SQL> select OBJECT_TYPE,count(*) from dba_objects where owner='SCOTT' group by object_

Oracle使用数据泵 (expdp/impdp)实施迁移

Oracle使用数据泵 (expdp/impdp)实施迁移 实验环境: 1.导出环境:RedHat6.4+Oracle 11.2.0.4.0,利用数据库自带的scott示例用户进行试验测试. Directory:wjq  à /tmp/seiang_wjq 2.导入环境:Centos7.1+Oracle 12.2.0.1.0   Oracle12c默认没有scott用户 Directory:imp_wjq  à /tmp/imp_comsys 一.导出数据: 特别注意:如果后续要导入的数据库版本

浅谈oracle逻辑备份、数据泵备份及冷备份

逻辑备份(数据迁移):以逻辑结构为为单位进行的备份跨用户移动数据跨数据库移动数据库为测试保存原始的数据状态对数据库进行版本升级 逻辑导出的注意事项:exp程序在目录中发现同名文件时会直接覆盖,不提示!!exp无法备份无段的空表执行逻辑导出时一定要注意字符集!最好使用包含中文的小表做测试!!导入时的数据和导出时的数据一模一样,导出之后数据库中表的数据变化全都丢失!! 逻辑导出:所有版本都可用,服务器端和客户端都可用 mkdir -p /home/oracle/expbk SQL> create t

利用expdp/impdp数据泵对oracle进行数据迁移

按照惯例先报系统环境: 导出环境: 操作系统Release版本:CentOS 6.5 OS内核Kernel版本:2.6.32-431.el6.x86.64 Oracle版本信息: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Rel

迁移数据至逻辑卷和LVM快照

迁移数据至逻辑卷和LVM快照 一.迁移数据至逻辑卷 1.首先创建一个逻辑卷 [root@centos7 ~]# pvcreate /dev/sd{b,c} Physical volume "/dev/sdb" successfully created. Physical volume "/dev/sdc" successfully created. [root@centos7 ~]# vgcreate testvg /dev/sd{b,c} Volume group

数据泵导入数据,完成测试数据的迁移

需求: 客户环境linux oracle 11.2.0.4单实例 新环境linux redhat oracle 11.2.0.1 单实例 客户需要准备什么一套新的测试库,当前测试库有软件,但是无DB.整个库都需要迁移过去. 流程及思路: 1.搭建测试库DB,字符集与生产环境相同 2.创建一个测试表,模拟导出导入之后,观察中文能否读写! 3.正式迁移导入测试数据! a)提前创建用户表空间及授予DBA权限; b)导入测试数据 c)检测确认 一.测试库DB创建 先看看物理内存多大,去判断测试库选择多大

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要执行一遍数据刷新脚本. 刷新脚本主要分为两部分 1.使用shell命令从数据库中读取已有的用户信息 (因为已经做过数据迁移,数据库已经从h2转为我们自己的mysql) saikuRefresh.sh #!/bin/bash #数据库连接信息 HOSTNAME="10.11.22.33" #