PL/SQL Developer导出导入表数据+填坑指南 | 您所在的位置:网站首页 › plsql导出表空间创建语句 › PL/SQL Developer导出导入表数据+填坑指南 |
最近被分配一个迁移表的任务,数据库用的是 Oracle,作为新手的我折腾了几天,跌跌撞撞的踩了些坑(表迁移过程有数据丢失),总算是解决问题。本文记录表迁移及解决表数据丢失问题的过程。 我用的 Oracle 图形化客户端是 PL/SQL Developer,做表导出导入数据还是蛮方便的。 一、表导入导出 1. 工具 > 导出数据 工具>导出/入表 2. 导出表 导出表这里在第 2 处有两种方式可供选择: Oracle 导出:导出的脚本为 dmp 文件; SQL 插入:导出的脚本为 sql 文件。二者的区别,我做了个测试,6600 条测试数据,dmp 导出的文件只有 1456kb 大小,而导出的 sql 文件有 3228 kb。dmp 导出文件和导入文件的速度也比 sql 文件快得多。所以我选择的是导出 dmp 文件。 3. 表导入操作与到导出一样,对话框也类似,这里就不赘述了。 4. 检查数据表导入之后别以为就结束了,查询数据总条数是否和老表的数据总条数一样,因为我在操作过程中就发现有几张表少了几十条数据。 4. 分析原因我的数据库字符集是 UTF8,老表的字符集是 GBK16。二者的区别是 UTF8 一个汉字占 3 个字节,GBK16 一个汉字占 2 个字节。 老表有一个字段 address 数据类型为 varchar2(200),存了 100 个汉字。在我的数据库里 100 个汉字要 300 个字节才能存储(字符集是 UTF8,一个汉字占 3 个字节)。所以在导入表时就报了一个错误:数据库表字段最大长度 200,导入数据长度 240。 解决方法有两个: 将我数据库表中字段的数据类型调成 varchar2(300),这样也能存储 100 个汉字。 将我数据库字符集换成 GBK16,这样 varchar2(200) 仍然能存储 100 个汉字。实际操作还是优先换字符集,谁也保不准是否还有其它字段数据类型过短,一个个排查有点麻烦。下面介绍字符集相关东东...... 二、修改字符集 1. 查询字符集报告 > DBA > NLS Database Parameters 第二行 NLS_CHARACTERSET: AL32UTF8 可见这里是 UTF8 编码。 查询字符集 2. 修改字符集 # PL/SQL 新建命令对话框 SQL>sqlplus /nolog # 在弹出的黑窗口敲下面的命令 SQL>conn / as sysdba # 若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器, # 然后执行以下命令: SQL>shutdown immediate SQL>STARTUP MOUNT SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL>ALTER DATABASE OPEN; SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; SQL>SHUTDOWN IMMEDIATE SQL>STARTUP修改完成之后再次查看字符集,发现已经更改为 GBK16 了,现在重新导入表数据发现数据全部导进来了~ |
CopyRight 2018-2019 实验室设备网 版权所有 |