数据库导入导出详解

1、数据库导入导出:

1、传统方式:exp(导出)和 imp(导入)

2、数据泵方式:expdp(导出)和 impdp(导入)

3、第三方工具:PL/sql Developer

2、三种导入导出方式优缺点比较
2.1、exp&imp

优点:代码书写简单易,从本地即可直接导入,不用在服务器中操作,降低难度,减少服务器上的操作也就保证了服务器上数据文件的安全性。

缺点:这种导入导出的速度相对较慢,合适数据库数据较少的时候。如果文件超过几个G,大众性能的电脑,至少需要4~5个小时左右。

2.2、expdp&impdp

优点:导入导出速度相对较快,几个G的数据文件一般在1~2小时左右。

缺点:代码相对不易理解,要想实现导入导出的操作,必须在服务器上创建逻辑目录(不是真正的目录)。我们都知道数据库服务器的重要性,所以在上面的操作必须慎重。所以这种方式一般由专业的程序人员来完成。

2.3、PL/sql Develpoer

优点:封装了导入导出命令,无需每次都手动输入命令。方便快捷,提高效率。

缺点:长时间应用会对其产生依赖,降低对代码执行原理的理解。

3、注意

目标数据库:数据即将导入的数据库。

源数据库:数据导出的数据库。

1、目标数据库要与源数据库有着名称相同的表空间。

2、目标数据在进行导入时,用户名尽量相同(这样保证用户的权限级别相同)。

3、目标数据库每次在进行数据导入前,应做好数据备份,以防数据丢失。4、使用数据泵时,一定要现在服务器端建立可用的逻辑目录,并检查是否可用。

5、弄清是导入导出到相同版本还是不同版本(oracle10g版本与oracle11g版本)。

6、目标数据导入前,弄清楚是数据覆盖(替换),还是仅插入新数据或替换部分数据表。

7、确定目标数据库磁盘空间是否足够容纳新数据,是否需要扩充表空间。

8、导入导出时注意字符集是否相同,一般Oracle数据库的字符集只有一个,并且固定,一般不改变。

9、导出格式介绍:

Dmp格式:.dmp是二进制文件,可跨平台,还能包含权限,效率好;

Sql格式:.sql格式的文件,可用文本编辑器查看,通用性比较好,效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字(blob,clob,long),如果有,会报错;

Pde格式:.pde格式的文件,.pde为PL/SQL Developer自有的文件格式,只能用PL/SQL Developer工具导入导出,不能用文本编辑器查看;

10、确定操作者的账号权限。

4、三者的导入导出方法
4.1、传统方法

1、导入导出语法

exp(imp)  username/password@servicename:1521 file="e:\temp.dmp" full = y
exp(imp)  username/password@ip:端口/orcl file="e:\temp.dmp" full = y

2、数据库导出举例

exp stg/stg@127.0.0.1:1521/orcl file="e:\stg.dmp" full = y;

3、参数说明

exp:导出命令,导出时必写。
imp:导入命令,导入时必写。
username:导出数据的用户名,必写。
password:导出数据的密码,必写。
@:地址符号,必写。
servicename:oracle的服务名,必写。
1521:端口号,1521是默认的可以不写,非默认要写。
file="e:\stg.dmp":文件存放路径地址,必写。
full=y 表示全库导出。可以不写,则默认为no,则只导出用户下的对象。

4、方法细分

1、完全导入导出:

exp(imp)  username/password@servicename:1521 file="e:\temp.dmp" full = y;

2、部分用户表table导入导出:

exp(imp)  username/password@servicename:1521 file="e:\temp.dmp" tabels= (table1,table2,table3,...);

3、表空间tablespaces导入导出:

exp(imp)  username/password@servicename:1521 file="e:\temp.dmp" tablespaces=(tablespace1,tablespace2,tablespace3,...);

一个数据库实例可以有N个表空间(tablespace),一个表空间下可以有N张表(table)。

4、用户名username对象导入导出:

exp(imp)  username/password@servicename:1521 file="e:\temp.dmp" owner(username1,username2,username3);

5、按用户导出:

exp username/password@servicename:1521 file=C:\person.dmp owner=用户名

6、按用户导入:

imp username/password@servicename:1521 file=C:\stg.dmp fromuser=[old_username] touser=[username]
4.2、数据泵方法

创建directory

expdp(impdp) username/password@servicename:1521 schemas=username dumpfile=file1.dmp logfile=file1.log directory=testdata1 remap_schema=test:test;

数据库导出举例

expdp xinxiaoyong/123456@127.0.0.1:1521 schemas=xinxiaoyong dumpfile=test.dmp logfile=test.log directory=testdata1;

参数说明

exp:导出命令,导出时必写。
imp:导入命令,导入时必写,每次操作,二者只能选择一个执行。
username:导出数据的用户名,必写;
password:导出数据的密码,必写;
@:地址符号,必写;
SERVICENAME:Oracle的服务名,必写;
1521:端口号,1521是默认的可以不写,非默认要写;
schemas:导出操作的用户名;
dumpfile:导出的文件;
logfile:导出的日志文件,可以不写;
directory:创建的文件夹名称;
remap_schema=源数据库用户名:目标数据库用户名:二者不同时必写,相同可以省略;

查看表空间

select * from dba_tablespaces;

查看管理员目录

同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错

select * from dba_directories;

创建逻辑目录

该命令不会在操作系统创建真正的目录,最好以system等管理员创建。

create directory testdata1 as 'd:\test\dump';

授权

给 stg 用户赋予在指定目录的操作权限,最好以system等管理员赋予。

grant read,write on directory testdata1 to stg;

导出数据

1、按用户导

expdp xinxiaoyong/123456@orcl schemas=xinxiaoyong dumpfile=expdp.dmp directory=testdata1;

2、并行进程parallel

expdp xinxiaoyong/123456@orcl directory=testdata1 dumpfile=xinxiaoyong3.dmp parallel=40 job_name=xinxiaoyong3

3、按表名导

expdp xinxiaoyong/123456@orcl tables=emp,dept dumpfile=expdp.dmp directory=testdata1;

4、按查询条件导

expdp xinxiaoyong/123456@orcl directory=testdata1 dumpfile=expdp.dmp tables=emp query='WHERE deptno=20';

5、按表空间导

expdp system/manager directory=testdata1 dumpfile=tablespace.dmp tablespaces=temp,example;

6、导整个数据库

expdp system/manager directory=testdata1 dumpfile=full.dmp FULL=y;

导入数据

1、导到指定用户下

impdp stg/stg directory=testdata1 dumpfile=stg.dmp schemas=stg;

2、改变表的 owner

impdp dw/dw directory=testdata1 dumpfile=dw.dmp tables=xinxiaoyong.dept remap_schema =stg:dw;

3、导入表空间

impdp system/manager directory=testdata1 dumpfile=tablespace.dmp tablespaces=example;

4、导入数据库

impdb system/manager directory=dump_dir dumpfile=full.dmp FULL=y;

5、追加数据

impdp system/manager directory=testdata1 dumpfile=expdp.dmp schemas=system  table_exists_action;
4.3、PLSQL方法

登录plsql工具,所使用用户为源数据库有导出权限(exp_full_database,dba等)的用户。

导出建表语句(包括存储结构)

导出步骤:工具,导出表,选好表以后,下方有Oracle导出是对应的dmp文件,SQL插入是对应的SQL文件。

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要导出 MySQL 数据库中的数据,可以使用以下步骤: 1. 首先,您需要使用 JDBC 驱动程序连接到您的 MySQL 数据库。如果您还没有安装 JDBC 驱动程序,请下载并安装 MySQL Connector/J。 2. 接下来,您需要编写一个 Java 程序来连接到 MySQL 数据库并执行 SELECT 查询以检索数据。 3. 将检索到的数据写入 CSV 文件或 Excel 文件中。 以下是一个使用 Java 和 MySQL Connector/J 导出数据的示例程序: ```java import java.io.FileWriter; import java.io.IOException; import java.sql.*; public class ExportData { public static void main(String[] args) throws Exception { // 数据库连接参数 String url = "jdbc:mysql://localhost:3306/mydb"; String user = "root"; String password = "mypassword"; // 创建数据库连接 Connection conn = DriverManager.getConnection(url, user, password); // 创建查询语句 String sql = "SELECT * FROM users"; // 执行查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // 创建 CSV 文件 FileWriter writer = new FileWriter("users.csv"); // 写入表头 ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { writer.append(metaData.getColumnName(i)); if (i < columnCount) { writer.append(","); } } writer.append("\n"); // 写入数据 while (rs.next()) { for (int i = 1; i <= columnCount; i++) { String value = rs.getString(i); writer.append(value); if (i < columnCount) { writer.append(","); } } writer.append("\n"); } // 关闭资源 writer.close(); rs.close(); stmt.close(); conn.close(); System.out.println("Data exported successfully."); } } ``` 此程序将从名为 `users` 的表中检索数据并将其写入名为 `users.csv` 的 CSV 文件中。您可以根据需要修改查询和文件名。 ### 回答2: Java导出MySQL是一种常见的操作,可以使用Java编程语言来实现。 首先,需要使用Java中的JDBC(Java Database Connectivity)来连接MySQL数据库。通过加载MySQL的JDBC驱动程序并建立与数据库的连接,我们可以使用Java代码来执行SQL查询和操作。 在导出MySQL数据库之前,需要确定要导出的表格和数据。可以使用MySQL提供的工具(如MySQL Workbench)来查看数据库结构和数据内容。 接下来,可以使用Java编写代码来导出MySQL数据库。可以通过以下步骤来实现: 1. 在Java代码中,使用JDBC来连接到MySQL数据库。 2. 使用SQL语句查询数据库中所有表格的信息,可以使用如下SQL语句: ```sql SHOW TABLES; ``` 3. 遍历每个表格,使用SQL语句查询表格结构信息和数据,可以使用如下SQL语句: ```sql SELECT * FROM 表格名称; ``` 4. 将查询结果保存到文件中,可以使用Java的文件操作类(如FileWriter、BufferedWriter等)来将数据写入到文件中。 5. 循环处理每个表格,重复步骤3和步骤4,直到导出所有表格的结构和数据。 6. 关闭数据库连接和文件流,确保资源的释放。 需要注意的是,在导出MySQL数据库之前,请确保已正确配置MySQL的JDBC驱动,并在Java项目中添加所需的依赖。 总结起来,通过Java编程语言结合JDBC,可以连接到MySQL数据库并查询表格结构和数据,然后将结果保存到文件中,以实现MySQL数据库导出功能。 ### 回答3: Java导出MySQL是通过使用Java提供的JDBC(Java数据库连接)库实现的。以下是一个基本的示例代码,用于导出MySQL数据库中的数据: 1. 首先,确保已经安装了Java Development Kit(JDK)以及MySQL数据库。 2. 在项目中添加MySQL连接器的JAR文件,例如mysql-connector-java.jar。 3. 创建一个Java类,并导入所需的包,如java.sql和java.io。 4. 在Java类中,创建一个数据库连接对象并指定连接参数,如主机名、端口、用户名、密码和数据库名称。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.io.FileWriter; import java.io.IOException; public class MySQLExport { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/database_name"; // 替换为实际的数据库连接参数 String user = "username"; // 替换为实际的用户名 String password = "password"; // 替换为实际的密码 try { // 创建数据库连接 Connection conn = DriverManager.getConnection(url, user, password); // 创建Statement对象 Statement stmt = conn.createStatement(); // 执行SQL查询语句 String query = "SELECT * FROM table_name"; // 替换为实际的表名 ResultSet rs = stmt.executeQuery(query); // 创建输出文件 FileWriter fileWriter = new FileWriter("exported_data.csv"); // 替换为实际的输出文件路径 // 将结果写入文件 while (rs.next()) { // 根据导出的需求,将数据写入文件 String data = rs.getString("column_name") + ","; // 替换为实际的列名 // 继续添加其他列的数据 fileWriter.write(data); } // 关闭资源 rs.close(); stmt.close(); conn.close(); fileWriter.close(); System.out.println("数据成功导出至exported_data.csv文件。"); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码将连接到指定的MySQL数据库,执行查询语句并将结果导出到一个名为exported_data.csv的CSV文件中。如果有其他的导出需求,可以根据具体的需求调整代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值