
开始—运行—输入“CMD”回车,然后直接写入以下命令
导出的命令:
exp 用户名/密码@数据库名 file=D:\databasedmp log=datalog
file后是写得你导出的文件存放的路径,databasedmp是你导出的文件,log是你导出日志,便于查询错误,不要也可以。例如 exp user/password@orcl file=d:\aaadmp建议使用工具来做,直接手工命令相当的麻烦的。
1、
建议使用:Toad for Oracle 10、PLSQL Developer等Oracle工具 *** 作。
把Oracle数据库中的数据转为文本或Excel或保存为sql插入语句,再插入Mysql中,这样就不存在接口字符集差异问题。
2、
也可以使用管道方式直接导入,使用PowerBuilder工具导入。
直接dmp是不现实的!导出数据库命令:
mysqldump -u root -p mydb2 > e:\mydbsql
把数据库mydb2导出到e盘的mydbsql
注意:在dos下进入mysql安装的bin目录下,但是不要登陆。
导入数据库命令:
mysqldump -u root -p mydb2 < e:\mydbsql
把数据库e盘的mydbsql导入到mydb2
注意:要先新建mydb2 然后使用导入语句
oracle 用户创建 数据库的导入导出imp/exp
可以在SQLPLUSEXE或者DOS(命令行)中执行执行环境:可以在SQLPLUSEXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中 安装目录ora81BIN被设置为全局路径,
该目录下有EXPEXE与IMPEXE文件被用来执行导入导出。
创建用户
给用户增加导入数据权限的 *** 作
第一,启动sqlpuls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=dmp
或者 imp userid=system/manager full=y file=filenamedmp
执行示例:
F:WorkOracle_Databackup>imp userid=test/test full=y file=inner_notifydmp 17jquerycom
下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochudmp中
exp system/manager@TEST file=d:daochudmp full=y
exp fang/fang@ORCL file=d:oais20100401dmp full=y
exp oais/oais@ORCL file=d:oais_mjdmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochudmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgntdmp tables=(inner_notify,notify_staff_relat)
exp fang/fang@ORCL file=d:oais20100401_essmenudmp tables=(essmenu)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochudmp tables=(table1) query=" where filed1 like '00%'"
上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。 一起jquery,17jquery
数据的导入
1 将D:daochudmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochudmp
imp aichannel/aichannel@HUST full=y file=d:datanewsmgntdmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:daochudmp中的表table1 导入
imp system/manager@TEST file=d:daochudmp tables=(table1)
基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。 MSSQL的导入导出有三种方法,不可以在cmd模式下进行:1使用Transact-SQL进行数据导入导出 我们很容易看出,Transact-SQL方法就是通过SQL语句方式将相同或不同类型的数据库中的数据互相导入导出或者汇集在一处的方法。如果是在不同的SQL Server数据库之间进行数据导入导出,那将是非常容易做到的。一般可使用SELECT INTO FROM和INSERT INTO。使用 SELECT INTO FROM时INTO后跟的表必须存在,也就是说它的功能是在导数据之前先建立一个空表,然后再将源表中的数据导入到新建的空表中,这就相当于表的复制(并不会复制表的索引等信息)。而INSERT INTO的功能是将源数据插入到已经存在的表中,可以使用它进行数据合并,如果要更新已经存在的记录,可以使用UPDATE。 SELECT INTO table2 FROM table1 --table1和table2的表结构相同 INSERT INTO table2 SELECT FROM table3 --table2和table3的表结构相同 当在异构数据库之间的进行数据导入导出时,情况会变得复杂得多。首先要解决的是如何打开非SQL Server数据库的问题。 在SQL Server中提供了两个函数可以根据各种类型数据库的OLE DB Provider打开并 *** 作这些数据库,这两个函数是OPENDATASOURCE和OPENROWSET。它们的功能基本上相同,不同之处主要有两点。 2 使用命令行BCP导入导出数据 很多大型的系统不仅仅提供了友好的图形用户接口,同时也提供了命令行方式对系统进行控制。在SQL Server中除了可以使用SQL语句对数据进行 *** 作外,还可以使用一个命令行工具BCP对数据进行同样的 *** 作。BCP是基于DB-Library 客户端库的工具。它的功能十分强大,BCP能够以并行方式将数据从多个客户端大容量复制到单个表中,从而大大提高了装载效率。但在执行并行 *** 作时要注意的是只有使用基于 ODBC 或 SQL OLE DB 的 API 的应用程序才可以执行将数据并行装载到单个表中的 *** 作。 BCP可以将SQL Server中的数据导出到任何OLE DB所支持的数据库的,如下面的语句是将authors表导出到excel文件中。 bcp pubsdboauthors out c:\temp1xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P"password" BCP不仅能够通过命令行执行,同时也可以通过SQL执行,这需要一个系统存储过程xp_cmdshell来实现,如上面的命令可改写为如下形式。 EXEC masterxp_cmdshell 'bcp pubsdboauthors out c:\temp1xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P"password"' 3 使用数据转换服务(DTS)导入导出数据 DTS是SQL Server中导入导出数据的核心,它除有具有SQL和命令行工具BCP相应的功能外,还可以灵活地通过VBScript、JScript等脚本语言对数据进行检验、净化和转换。 SQL Server为DTS提供了图形用户接口,用户可以使用图形界面导入导出数据,并对数据进行相应的处理。同时,DTS还以com组件的形式提供编程接口,也就是说任何支持com组件的开发工具都可以利用com组件使用DTS所提供的功能。DTS在SQL Server中可以保存为不同的形式,可以是包的形式,也可以保存成Visual Basic源程序文件,这样只要在VB中编译便可以使用DTS com组件了。 DTS和其它数据导入导出方式最大的不同就是它可以在处理数据的过程中对每一行数据进行深度处理。以下是一段VBScript代码,这段代码在处DTS理每一条记录时执行,DTSDestination表示目标记录,DTSSource表示源记录,在处理逗婚姻状况地时,将源记录中的逗婚姻状况地中的0或1转换成目标记录中逗已婚地或逗未婚地。 Function Main() DTSDestination("姓名") = DTSSource("姓名") DTSDestination("年龄") = DTSSource("年龄") If DTSDestination("婚姻状况") = 1 Then DTSDestination("婚姻状况") = "已婚" Else DTSDestination("婚姻状况") = "未婚" End If Main = DTSTransformStat_OK End Function1首先我们确定oracle数据库中的数据库可用,我们打开navicat,依次点击连接->oracle,连接名可以自己随便定义
2连接成功之后,我们的navicat就会出现这个标志,
3接下来我们就要开始数据库之间的转换,首先我们在mysql新建一个数据库,由于之前我已经转换过一次,在此就不纠结数据库名了,字符集选择utf8mb4
utf8和utf8mb4的区别:
MySQL在553之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思, 专门用来兼容四字节的unicode。
好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。
4创建完数据库之后,我们需要将Oracle中的表转到mysql,依次点击工具->数据传输,源数据就选择Oracle数据库中需要转换的数据库,目标数据库就选择我们新建的数据库,点击选项,在遇到错误时继续打勾,点下一步
5选择我们需要转储的数据,本次转换只转换表结构,视图的转换稍微有些麻烦,因为mysql视图不支持子查询。点击开始
6接下来我们需要看数据的转换过程中发现了哪些错误,我们要将这些错误记录下来,可能由于某些元素会导致某些表转换不成功,这时就需要我们在转换完成后自己手动去创建这些表。
7由于数据库中的大小原因会导致转换的时间长度,在转换完成后,可以看到上面报了多少错误,然后我们复制日志文件,打开notepad++,将日志复制进去,查找 [ERR],通常的提示都是这种,我们需要记录下该表,
8由于完整的转换时间比较长,通常在转换完成后复制整个日志文件,查找[ERR]就可以看到转换中出现的错误,可能会出现重复的表名,重复的我们只需要记住一个即可。我们需要记住的是报错语句的上一条记录的表名,我们记下来这写问题表,等下来处理。
9在数据转换完成后,会有一些问题,就是在转换的过程中,oracle中的integer类型会在mysql中转换成decimal类型,date类型也会出现一些问题,就会出现下面这种情况,这时就需要我们将这些字段更改
10我们对转换好的mysql数据库点击右键->转储sql文件->仅结构
11转储完成后打用notepad++打开sql文件,将decimal(x,x)全部替换为int,如果有datetime类型的,将datetime(0)转换成datetime
12保存之后我们再新建一个数据库,和刚才一样,选择我们刚创建的数据库,右键,运行sql文件,选择我们改过的sql文件
13运行成功后,目前,我们jaranmes3中的数据是对的,jranmes4中的表结构是对,所以我们需要将此同步一下,这里我们选择将jranmes4中的结构同步到jranmes3,选择工具->结构同步,选择好后点击比对,确定没什么问题选择部署,运行
14更改完表的结构,我们需要对刚才转换中出现错误的表进行重新创建,我们根据记录的表明,在PL/SQL中搜索表名,右键->查看sql
在更改时,我们不需要关心表空间,只需要在创建表的时候添加上主键,创建索引就可以了。
比如上面的sql,在mysql中,我们需要写成
-- Create table
create table UTILS_OBJ_ASSOCHECK
(
masterobj VARCHAR2(64) not null,
slaveobj VARCHAR2(64) not null,
keyattrsrel VARCHAR2(256) not null,
primary key (KEYATTRSREL, SLAVEOBJ, MASTEROBJ)
)
有的表可能包含的有索引,类似下面这样的语句
在mysql中不能使用这种方法来添加索引,上图中我们添加的是普通索引,我们需要查找对应的sql语句,我们应该使用下面的方式来添加索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
所以,上面的语句我们可以写成
ALTER TABLE BIZ_REPORT_BOX_BATCH_ASSO ADD INDEX BIZ_REPORT_BOX_BATCH_ASSO (BATCHNO, BOXNO)
有时候PLSQL中添加的是唯一索引,我们需要使用mysql添加唯一索引方式的语句,以下面的格式
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
需要注意的是:mysql中没有varchar2类型,且有时varchar2(255)会导致长度太长无法完成建表,所以我们在PL/SQL复制完建表语句后,还需要我们去更改建表语句,比如将varchar2改成varchar,将number改为int。
15根据上面的步骤,将我们转换中遇到问题的表全部重新更新一下就可以了如果你一表包含一个lob类型的列如果存在一个与这个表同名的同义词那么在导入这个表的数据时会报ora-01403错:
在oracle10g中的测试情况如下:
1创建两个用户test和cs
idle> conn sys/zzh_2046@jy_1 as sysdba
已连接。
sys@JINGYONG> grant dba to test identified by test;
授权成功。
sys@JINGYONG> grant dba to cs identified by cs;
授权成功。
2在用户test中创建一个有clob类型的列的表emp并向表中插入几行记录
sys@JINGYONG> conn test/test@jy_1
已连接。
test@JINGYONG> create table emp (col_a number, col_b varchar2(3), c_lob clob);
表已创建。
test@JINGYONG>
test@JINGYONG> INSERT INTO EMP VALUES (180, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (181, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (182, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (183, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (184, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (185, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> commit;
提交完成。
连接到用户cs并创建一个同义词叫EMP
1创建同义词EMP是使用testemp表来创建(也可以用任意表来创建同义词EMP,只要保证同义词的名字与要导入表的名字相同就行)
test@JINGYONG> conn cs/cs@jy_1
已连接。
cs@JINGYONG> create synonym EMP for testEMP;
同义词已创建。
cs@JINGYONG> commit;
提交完成。
cs@JINGYONG>
C:\Documents and Settings\Administrator>exp test/test@jy_1 file=f:\empdmp table
s=EMP
Export: Release 102010 - Production on 星期四 12月 19 22:00:15 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 10g Enterprise Edition Release 102010 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径
正在导出表 EMP导出了 6 行
成功终止导出, 没有出现警告。
C:\Documents and Settings\Administrator>imp cs/cs@jy_1 file=f:\empdmp tables=EM
P ignore=y
Import: Release 102010 - Production on 星期四 12月 19 22:01:48 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 10g Enterprise Edition Release 102010 - Production
With the Partitioning, OLAP and Data Mining options
经由常规路径由 EXPORT:V100201 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
正在将 TEST 的对象导入到 CS
正在将 TEST 的对象导入到 CS
正在导入表 "EMP"
IMP-00058: 遇到 ORACLE 错误 1403
ORA-01403: no data found导入了 6 行
成功终止导入, 但出现警告。
2使用表t1来创建同义词EMP
cs@JINGYONG> create synonym EMP for syst1;
同义词已创建。
cs@JINGYONG> drop table emp;
drop table emp
第 1 行出现错误:
ORA-00942: 表或视图不存在
C:\Documents and Settings\Administrator>imp cs/cs@jy_201 file=f:\empdmp tables=
EMP ignore=y
Import: Release 102010 - Production on 星期五 12月 20 08:13:07 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V100201 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
正在将 TEST 的对象导入到 CS
正在将 TEST 的对象导入到 CS
正在导入表 "EMP"
IMP-00058: 遇到 ORACLE 错误 1403
ORA-01403: 未找到任何数据
IMP-00058: 遇到 ORACLE 错误 904
ORA-00904: "C_LOB": 标识符无效
成功终止导入, 但出现警告。
11g的测试
1创建两个用户test和cs
idle> conn sys/zzh_2046@jy_201 as sysdba
已连接。
sys@JINGYONG> grant dba to test identified by test;
授权成功。
sys@JINGYONG> grant dba to cs identified by cs;
2在用户test中创建一个有clob类型的列的表emp并向表中插入几行记录
sys@JINGYONG> conn test/test@jy_201
已连接。
test@JINGYONG> create table emp (col_a number, col_b varchar2(3), c_lob clob);
表已创建。
test@JINGYONG>
test@JINGYONG> INSERT INTO EMP VALUES (180, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (181, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (182, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (183, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (184, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> INSERT INTO EMP VALUES (185, 'a', '01010101010101');
已创建 1 行。
test@JINGYONG> commit;
提交完成。
连接到用户cs并创建一个同义词叫EMP
1创建同义词EMP是使用testemp表来创建(也可以用任意表来创建同义词EMP,只要保证同义词的名字与要导入表的名字相同就行)
test@JINGYONG> conn cs/cs@jy_201
已连接。
cs@JINGYONG> create synonym EMP for testEMP;
同义词已创建。
cs@JINGYONG> commit;
提交完成。
cs@JINGYONG>
使用10g的客户端连接到11g的数据库进行导出 *** 作
C:\Documents and Settings\Administrator>exp test/test@jy_201 file=f:\empdmp tab
les=EMP
Export: Release 102010 - Production on 星期四 12月 19 22:10:28 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径
正在导出表 EMP导出了 6 行
成功终止导出, 没有出现警告。
使用10g的客户端连接到11g的数据库进行导入 *** 作也会报ora-01403错误
C:\Documents and Settings\Administrator>imp cs/cs@jy_201 file=f:\empdmp tables=
EMP ignore=y
Import: Release 102010 - Production on 星期四 12月 19 22:11:27 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V100201 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
正在将 TEST 的对象导入到 CS
正在将 TEST 的对象导入到 CS
正在导入表 "EMP"
IMP-00058: 遇到 ORACLE 错误 1403
ORA-01403: 未找到任何数据导入了 6 行
成功终止导入, 但出现警告。
使用11g的客户端连接到11g的数据库进行导出 *** 作
[oracle@jingyong ~]$ exp test/test file=/home/oracle/empdmp tables=EMP
Export: Release 112010 - Production on Sat Dec 7 01:41:44 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates All rights reserved
Connected to: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path
exporting table EMP 12 rows exported
Export terminated successfully without warnings
使用11g的客户端连接到11g的数据库进行导出 *** 作在有与导入表同名的同义词的情况下不会报ora-01403错误
[oracle@jingyong ~]$ imp cs/cs file=/home/oracle/empdmp tables=EMP ignore=y
Import: Release 112010 - Production on Sat Dec 7 01:42:20 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates All rights reserved
Connected to: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V110200 via conventional path
Warning: the objects were exported by TEST, not by you
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
importing TEST's objects into CS
importing TEST's objects into CS
importing table "EMP" 12 rows imported
Import terminated successfully without warnings
[oracle@jingyong ~]$
下面删除与表同名的同义词而且使用10g的客户端连接11g数据库进行导入 *** 作也是不会报ora-01403错误的
C:\Documents and Settings\Administrator>sqlplus /nolog
SQLPlus: Release 102010 - Production on 星期五 12月 20 07:51:34 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
idle> conn cs/cs@jy_1
已连接。
cs@JINGYONG> drop synonym EMP;
同义词已删除。
C:\Documents and Settings\Administrator>imp cs/cs@jy_201 file=f:\empdmp tables=
EMP ignore=y
Import: Release 102010 - Production on 星期五 12月 20 09:02:40 2013
Copyright (c) 1982, 2005, Oracle All rights reserved
连接到: Oracle Database 11g Enterprise Edition Release 112010 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V100201 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
正在将 TEST 的对象导入到 CS
正在将 TEST 的对象导入到 CS
正在导入表 "EMP"导入了 6 行
成功终止导入, 没有出现警告。
出现这个问题的原因:
是因为bug 7422758 IMPORTING A TABLE WITH A BLOB OR CLOB USING A SYNONYM CAUSES ORA-1403, fixed with 112
解决方法:
1 升级到112
2 打7422758补钉
注意:
在oracle11gr2版本中如果在对某个用户导入某个表时,而这个表有一个lob类型的列且这个用户存一个与要导入表同名的同义词,在这种情况下使用oracle11gr2版本的客户端进行导出再导入是不会报ora-01403错误如果使用oracle11gr2版本以下的客户端进行导出和导入也是会报ora-01403错误的
来自 “ ITPUB博客 ” ,链接:>1、Oracle数据库导出的命令,参考下面的
exp system/system@ordb file=d:\mbdmp owner=(scott)
2、导入mysql的步骤,参考下面的。
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的sql)
mysql>source d:\testsql
3、你想进行数据库之间的数据导入、导出的话,可以使用这个工具,很方便的。
动软Net代码生成器
可支持SQL Server、Oracle、MySQL、OleDb四种类型的数据库同时管理
实现类似SQLServer2008的查询分析器的功能,方便编写代码时想进行数查询
>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)