背景: 偏僻字,中文. 符号 采用:
SIMPLIFIED CHINESE_CHINA.AL32UTF8 可以正常显示
源数据库(ZHS16GBK) -----> 目标数据库(AL32UTF8)
前提: 创建目标数据库 eg:te 该数据库需与源数据库名字对应,
默认表空间,临时表空间,用户, 用户权限对应。
(1)create tablespace TS_XZ datafile '.dbf' size 800M autoextend on maxsize unlimited;
(2)create user htxz
identified by 123456
default tablespace TS_HTXZ
temporary tablespace TEMP
profile DEFAULT;
(3)grant connect to htxz with admin option ;
grant dba to htxz with admin option;
grant unlimited tablespace to htxz with admin option;
grant create session to htxz;
- 导出源数据库数据(数据和表结构)
1.1创建dmp文件导出存储位置
sqlplus sys/Nav6k as sysdba //sys 账号登录
create or replace directory dmp as 'D:/dmp'
grant read,write on directory dmp to te;
1.2导出源数据库数据和表结构
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
expdp te/123456@orcl DIRECTORY=DMP DUMPFILE=te.dmp logfile=te.log SCHEMAS=te
//expdp 用户名/密码@实列 目录 dmp文件名字 日志文件 数据库名
- 导入目标数据库数据(表结构等元数据 包含视图,序列,存储过程)
2.1
IMPDP USERID='sys/qaz12326K@orcl as sysdba' schemas=te directory=DMP dumpfile=te.dmp logfile=20100816.log content=METADATA_ONLY
// METADATA_ONLY 只导入表结构
- 处理字段长度问题
3.1查询出alter sql
SELECT 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME || ' MODIFY ("' ||
COLUMN_NAME || '" VARCHAR2(' || CEIL(DATA_LENGTH * 1.5) ||
'));'
FROM DBA_TAB_COLUMNS
WHERE OWNER = 'TES'
AND DATA_TYPE IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2')
AND DATA_LENGTH > 1
AND COLUMN_NAME not in('SYSDATE','DATE')
AND DATA_LENGTH < 2666
AND TABLE_NAME NOT IN (SELECT VIEW_NAME FROM DBA_VIEWS WHERE OWNER = 'TES');
3.2执行 alter sql (这里执行的是3.1查询出的alter语句)
ALTER TABLE TES.TES_CODE MODIFY ("NAME" VARCHAR2(150));
3.3. 删除两个外键
SYS_PACOL_FK
SYS_SION_RESOURCE_FK2
备注: 删除外键需视情况而定,我导入数据的时候,数据违法了完整性约束,所以采用删除外键,导入数据。
- 导入目标数据库数据(数据)
IMPDP USERID='sys/qaz126K@orcl as sysdba' schemas=te directory=DMP dumpfile=te.dmp logfile=20100816.log content=data_only
备注: 600M数据 耗时 2min 导入进度,导入日志在日志文件中查看
- 查看目标数据库数据(数据)是否正常
查看数据库数据