PL/SQL Developer导出导入表数据+填坑指南 您所在的位置:网站首页 plsql导出表空间创建语句 PL/SQL Developer导出导入表数据+填坑指南

PL/SQL Developer导出导入表数据+填坑指南

2024-07-16 05:56| 来源: 网络整理| 查看: 265

最近被分配一个迁移表的任务,数据库用的是 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 实验室设备网 版权所有