为了迁移数据库,必须将原始oracle备份文件导入新的oracle数据库。 导出EXP后,IMP报告了错误,字符串长度太长,报告了错误。 搜索结果显示,原始数据库为GBK字符集(oracle为varchar2类型,汉字1个字符为2位),新数据库为UTF8字符集),汉字1个字符为3位。
解决办法如下。 批量更改原始数据库中包含varchar2的所有字段的长度。
修正分为两个阶段,varchar2最长支持4000个长度。 如果存在carchar2的长度超过2667(4000*2/3)的部分,则可以修正为CLOB类型,或验证每个字段的最大使用长度,如果小于2667,则调整为4000即可。
批量修改方法如下。
createorreplaceprocedurep _ testas
CURSOR TEMP IS
SELECT TABLE_NAME,COLUMN_NAME,Ceil(DATA_LENGTH*3/2) data_length
FROM USER_TAB_COLUMNS
where data _ type=‘varchar 2’
和data _ length 2000;
STRVarchar2(100 ) :=‘‘“;
比根
FOR S IN TEMP LOOP
str :=‘alter table‘| s.table _ name |‘modify’| s.column _ name |
‘varchar 2’||data _ length||‘’‘;
DMS_output.put_line(str;
执行immediate str;
结束环路;
结束;
注:如果存在字段的函数索引,Oracle general ledger将报告错误,要求在执行批量更改之前删除函数索引。
最后,导出dmp并导入IMP即可。
原文: http://www.cn blogs.com/Huang en88/p/4664759.html