ORA-39257: Data cannot be remapped for more than 10 columns.
ORA-39257: Data cannot be remapped for more than 10 columns.
前言
还是脱敏数据相关的事情。
使用expdp的remap_data参数对指定列进行一定规则转换后,如果指定转换的列超过10列,则报错ORA-39257。
ORA-39001: invalid argument value
ORA-39257: Data cannot be remapped for more than 10 columns.
注意:这是一个BUG,可以用补丁修复。
环境模拟
自己的环境模拟吧。
数据库版本:
SYS@zkm> select * from v$version where rownum=1; BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SYS@zkm>
构造表(20个字段,超过10个即可)。

create table scott.test (id number); begin
for i in 1..19 loop
execute immediate 'alter table scott.test add a'||i||' number(1)';
end loop;
end;
/
模板复制
SYS@zkm> create table scott.test (id number); Table created. SYS@zkm> begin
2 for i in 1..19 loop
3 execute immediate 'alter table scott.test add a'||i||' number(1)';
4 end loop;
5 end;
6 / PL/SQL procedure successfully completed. SYS@zkm> desc scott.test
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
A1 NUMBER(1)
A2 NUMBER(1)
A3 NUMBER(1)
A4 NUMBER(1)
A5 NUMBER(1)
A6 NUMBER(1)
A7 NUMBER(1)
A8 NUMBER(1)
A9 NUMBER(1)
A10 NUMBER(1)
A11 NUMBER(1)
A12 NUMBER(1)
A13 NUMBER(1)
A14 NUMBER(1)
A15 NUMBER(1)
A16 NUMBER(1)
A17 NUMBER(1)
A18 NUMBER(1)
A19 NUMBER(1)
创建包和包体,包中定制数据转换规则,不需要太复杂。

create or replace package scott.pkg_remap
is
function fn_numeral_1(input_string number) return number;
end;
/ create or replace package body scott.pkg_remap
is
function fn_numeral_1(input_string number) return number as
begin
return input_string+1;
end;
end;
/
模板复制
SYS@zkm> create or replace package scott.pkg_remap
2 is
3 function fn_numeral_1(input_string number) return number;
4 end;
5 / Package created. SYS@zkm> create or replace package body scott.pkg_remap
2 is
3 function fn_numeral_1(input_string number) return number as
4 begin
5 return input_string+1;
6 end;
7 end;
8 / Package body created.
不需要有数据,直接导出就报错了。

create directory dirtmp as '/home/oracle/'; expdp \' / as sysdba\' directory=dirtmp dumpfile=test.dmp logfile=test.log cluster=n tables=scott.test reuse_dumpfiles=y remap_data=scott.test.a1:scott.pkg_remap.fn_numeral_1,scott.test.a2:scott.pkg_remap.fn_numeral_1,scott.test.a3:scott.pkg_remap.fn_numeral_1,scott.test.a4:scott.pkg_remap.fn_numeral_1,scott.test.a5:scott.pkg_remap.fn_numeral_1,scott.test.a6:scott.pkg_remap.fn_numeral_1,scott.test.a7:scott.pkg_remap.fn_numeral_1,scott.test.a8:scott.pkg_remap.fn_numeral_1,scott.test.a9:scott.pkg_remap.fn_numeral_1,scott.test.a10:scott.pkg_remap.fn_numeral_1,scott.test.a11:scott.pkg_remap.fn_numeral_1
模板复制
SYS@zkm> create directory dirtmp as '/home/oracle/'; Directory created. [oracle@oracle ~]$ expdp \' / as sysdba\' directory=dirtmp dumpfile=test.dmp logfile=test.log cluster=n tables=scott.test reuse_dumpfiles=y remap_data=scott.test.a1:scott.pkg_remap.fn_numeral_1,scott.test.a2:scott.pkg_remap.fn_numeral_1,scott.test.a3:scott.pkg_remap.fn_numeral_1,scott.test.a4:scott.pkg_remap.fn_numeral_1,scott.test.a5:scott.pkg_remap.fn_numeral_1,scott.test.a6:scott.pkg_remap.fn_numeral_1,scott.test.a7:scott.pkg_remap.fn_numeral_1,scott.test.a8:scott.pkg_remap.fn_numeral_1,scott.test.a9:scott.pkg_remap.fn_numeral_1,scott.test.a10:scott.pkg_remap.fn_numeral_1,scott.test.a11:scott.pkg_remap.fn_numeral_1 Export: Release 11.2.0.4.0 - Production on Wed May 13 14:56:27 2020 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39001: invalid argument value
ORA-39257: Data cannot be remapped for more than 10 columns.
mos上可以搜索到,这个一个BUG。
Bug 14202396 - Datapump remap_data fails if used for more than 10 cols in a table (Doc ID 14202396.8)
下载并打补丁。
解压。
[oracle@oracle ~]$ unzip p14202396_112040_Generic.zip
Archive: p14202396_112040_Generic.zip
creating: /
inflating: /README.txt
creating: /etc/
creating: /etc/xml/
inflating: /etc/xml/ShiphomeDirectoryStructure.xml
inflating: /etc/xml/GenericActions.xml
creating: /etc/config/
inflating: /etc/config/actions.xml
inflating: /etc/config/inventory.xml
inflating: /etc/config/deploy.xml
creating: /files/
creating: /files/sqlpatch/
creating: /files/sqlpatch//
inflating: /files/sqlpatch//postdeinstall.sql
inflating: /files/sqlpatch//postinstall.sql
creating: /files/rdbms/
creating: /files/rdbms/admin/
inflating: /files/rdbms/admin/prvtbpm.plb
inflating: /files/rdbms/admin/prvtbpd.plb
inflating: /files/rdbms/admin/prvtkupc.plb
inflating: /files/rdbms/admin/catmeta.sql
creating: /files/rdbms/xml/
creating: /files/rdbms/xml/xsl/
inflating: /files/rdbms/xml/xsl/kuemodtb.xsl
inflating: /files/rdbms/xml/xsl/kuetable.xsl
inflating: /files/rdbms/xml/xsl/kumodtab.xsl
inflating: /files/rdbms/xml/xsl/kucolumn.xsl
inflating: /postinstall.sql
replace PatchSearch.xml? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
inflating: PatchSearch.xml
这不是一个Rolling Patch,
[oracle@oracle ]$ opatch query . |grep rolling
Patch is a rolling patch: false
Patch is a FMW rolling patch: false
但是可以不需要停止数据库和监听等服务,在补丁目录下的etc/config/inventory.xml文件中有这个字样,
<oneoff_inventory>
<opack_version version="11.1.0.4.0"/>
<reference_id number=""/>
<unique_patch_id></unique_patch_id>
<date_of_patch year="" month="Apr" day="" time="11:51:05 hrs" zone="PST8PDT"/>
<base_bugs>
<bug number="" description="REMAP_DATA FAILS IF USED FOR MORE THAN 10 COLS IN A TABLE"/>
</base_bugs>
<required_components>
<component internal_name="oracle.rdbms" version="11.2.0.4.0" opt_req="O"/>
<component internal_name="oracle.rdbms.dbscripts" version="11.2.0.4.0" opt_req="O"/>
</required_components>
<os_platforms>
<platform name="Generic Platform 1" id=""/>
</os_platforms>
<executables></executables>
<instance_shutdown>false</instance_shutdown>
<instance_shutdown_message></instance_shutdown_message>
<online_rac_installable>false</online_rac_installable>
<run_as_root>false</run_as_root>
<sql_migrate>false</sql_migrate>
<wls_prereq_oneoffs></wls_prereq_oneoffs>
<prereq_oneoffs></prereq_oneoffs>
<coreq_oneoffs></coreq_oneoffs>
<overlay_oneoffs></overlay_oneoffs>
<patch_type value="singleton"/>
<product_family value="db"/>
<auto>false</auto>
<applicable_product value=""/>
<products></products>
<update_components></update_components>
</oneoff_inventory>
而且,readme中也没有步骤说明需要停服务。
在以往认知中小补丁除了online patch是可以不需要停机打的,这里按照readme来也不需要,还有需不需要考虑RAC的问题,有点虚。
当然,PSU是肯定要停集群停数据库的。
关于<instance_shutdown>false</instance_shutdown>这一项,网上有点少谈到这个,有时间我研究下。
打补丁(OPatch我的环境是升级过的,不需要考虑OPatch版本的问题了)。
[oracle@oracle ]$ pwd
/home/oracle/
[oracle@oracle ]$ opatch apply
Oracle Interim Patch Installer version 11.2.0.3.
Copyright (c) , Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2./db_1
Central Inventory : /u01/app/oraInventory
from : /u01/app/oracle/product/11.2./db_1/oraInst.loc
OPatch version : 11.2.0.3.
OUI version : 11.2.0.4.
Log file location : /u01/app/oracle/product/11.2./db_1/cfgtoollogs/opatch/opatch2020--13_15--51PM_1.log Verifying environment and performing prerequisite checks...
OPatch continues with these patches: Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name: You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y Backing up files...
Applying interim patch '' to OH '/u01/app/oracle/product/11.2.0/db_1' Patching component oracle.rdbms, 11.2.0.4.... Patching component oracle.rdbms.dbscripts, 11.2.0.4....
Patch successfully applied.
Log file location: /u01/app/oracle/product/11.2./db_1/cfgtoollogs/opatch/opatch2020--13_15--51PM_1.log OPatch succeeded.
跑脚本。
sqlplus / as sysdba
@?/sqlpatch//postinstall.sql
...这一步输出略,太多了...
再次导出数据,已经不再报错了。
[oracle@oracle ]$ expdp \' / as sysdba\' directory=dirtmp dumpfile=test.dmp logfile=test.log cluster=n tables=scott.test reuse_dumpfiles=y remap_data=scott.test.a1:scott.pkg_remap.fn_numeral_1,scott.test.a2:scott.pkg_remap.fn_numeral_1,scott.test.a3:scott.pkg_remap.fn_numeral_1,scott.test.a4:scott.pkg_remap.fn_numeral_1,scott.test.a5:scott.pkg_remap.fn_numeral_1,scott.test.a6:scott.pkg_remap.fn_numeral_1,scott.test.a7:scott.pkg_remap.fn_numeral_1,scott.test.a8:scott.pkg_remap.fn_numeral_1,scott.test.a9:scott.pkg_remap.fn_numeral_1,scott.test.a10:scott.pkg_remap.fn_numeral_1,scott.test.a11:scott.pkg_remap.fn_numeral_1 Export: Release 11.2.0.4. - Production on Wed May :: Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4. - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TABLE_01": "/******** AS SYSDBA" directory=dirtmp dumpfile=test.dmp logfile=test.log cluster=n tables=scott.test reuse_dumpfiles=y remap_data=scott.test.a1:scott.pkg_remap.fn_numeral_1,scott.test.a2:scott.pkg_remap.fn_numeral_1,scott.test.a3:scott.pkg_remap.fn_numeral_1,scott.test.a4:scott.pkg_remap.fn_numeral_1,scott.test.a5:scott.pkg_remap.fn_numeral_1,scott.test.a6:scott.pkg_remap.fn_numeral_1,scott.test.a7:scott.pkg_remap.fn_numeral_1,scott.test.a8:scott.pkg_remap.fn_numeral_1,scott.test.a9:scott.pkg_remap.fn_numeral_1,scott.test.a10:scott.pkg_remap.fn_numeral_1,scott.test.a11:scott.pkg_remap.fn_numeral_1
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "SCOTT"."TEST" KB rows
Master table "SYS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TABLE_01 is:
/home/oracle/test.dmp
Job "SYS"."SYS_EXPORT_TABLE_01" successfully completed at Wed May :: elapsed ::
PS:我虚拟机的时间是有问题的(手动狗头)。
后续
由于是生产的RAC环境,最后还是没有打。
搞成dblink导出到(顺便转换)别的库后,直接expdp。
ORA-39257: Data cannot be remapped for more than 10 columns.的更多相关文章
- C and SQL data types for ODBC and CLI
C and SQL data types for ODBC and CLI This topic lists the C and SQL data types for ODBC and CLI a ...
- 【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置
[DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技 ...
- 关于动态生成data组件
/*! * WeX5 v3 (http://www.justep.com) * Copyright 2015 Justep, Inc. * Licensed under Apache License, ...
- 转:主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Undelete 360
转自:Baidu 空间 2012-10-05 13:57 主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Und ...
- MySQL vs. MongoDB: Choosing a Data Management Solution
原文地址:http://www.javacodegeeks.com/2015/07/mysql-vs-mongodb.html 1. Introduction It would be fair to ...
- How much training data do you need?
How much training data do you need? //@樵夫上校: 0. 经验上,10X规则(训练数据是模型参数量的10倍)适用与大多数模型,包括shallow networ ...
- Tutorial: Analyzing sales data from Excel and an OData feed
With Power BI Desktop, you can connect to all sorts of different data sources, then combine and shap ...
- Part 9 Sorting data in AngularJS
To sort the data in Angular 1. Use orderBy filter {{ orderBy_expression | orderBy : expression : ...
- Spring mvc Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
随机推荐
- Java实现 蓝桥杯VIP 算法训练 开心的金明
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...
- Linux文件处理命令 ls 详解
Linux系统的应用场景最多的就是用作服务器的系统了,简洁,安全,高效,一般我们服务器端不会安装Linux的图形化界面,虽然现在一些Linux发行版的图形界面也很漂亮,但是,服务器最主要的是高效.所以 ...
- Java基础(十一)
一.连接到服务器 telnet是一种用于网络编程的非常强大的测试工具,你可以在命令shell中输入telnet来启动它. 二.实现服务器 服务器循环体: 1.通过输入数据流从客户端接收一个命令. 2. ...
- vscode 修改标签栏样式为换行全部展示
目前vscode的标签栏是滚动式的,选择查看都不是很方便,于是想要搞成andriod studio那种换行全部展示的标签栏. 因为vscode是electron写的,因此修改css就可以实现. 修改方 ...
- “进大厂大半年,每个月都想走!”大公司 VS 小公司到底该如何选择?
前言 江湖风云不断,有人吐槽阿里996,也有人吐槽华为狼性文化,这不,就看到有腾讯员工吐槽“进腾讯大半年,每个月都想走!” “和我一样,进去一周就想走”.“我都陷入自我怀疑了,以为自己适应不了大公司” ...
- ubuntu18.04安装qt时候的错误解决
在ubuntu系统下安装好qt5.5后启动qtceator时提示: Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库Qt5 ...
- 【Jmeter】分布式压测环境配置
注意:以下四点都必须一致 1.jmeter版本 2.内置插件 3.jdk版本1.8以上 4.同属一个局域网 助攻机设置 本机助攻机Linux系统,首先需要安装JDK并配置环境 JDk基本安装及配置环境 ...
- Redis PHP扩展安装步骤
### 下载最新的扩展文件,解压并进入文件夹 wget https://codeload.github.com/phpredis/phpredis/tar.gz/2.2.7 tar -zxvf 2.2 ...
- PyCharm远程连接服务器简明教程
转自本人知乎(https://zhuanlan.zhihu.com/p/149040742) 由于实验室的GPU都是放在远程服务器上,因此一直使用MobaXterm利用SSH远程跑实验,但是MobaX ...
- 一个非侵入的Go事务管理库——如何使用
在文章"清晰架构(Clean Architecture)的Go微服务: 事物管理"中,我谈到了如何在清晰架构中实现非侵入的事务管理. 它允许你把事务代码与业务逻辑代码分开,并且让你 ...