使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下;下面是操作过程;

1 开启服务

plsql 数据转mysql数据 plsql数据导入_plsql 数据转mysql数据

2 配置监听

找到下面文件:

plsql 数据转mysql数据 plsql数据导入_数据_02

记事本打开

plsql 数据转mysql数据 plsql数据导入_数据_03

 

plsql 数据转mysql数据 plsql数据导入_表空间_04

 

plsql 数据转mysql数据 plsql数据导入_数据库_05

在导航器的下拉菜单中选择:将数据库添加到树,

plsql 数据转mysql数据 plsql数据导入_数据库_06

然后点击确定

plsql 数据转mysql数据 plsql数据导入_表空间_07

 

plsql 数据转mysql数据 plsql数据导入_表空间_08

然后使用PL/SQL就可以登录了;

3 建立新表空间和新用户

使用system用户登录;执行如下sql语句建立表空间和新用户,以及给用户授权

plsql 数据转mysql数据 plsql数据导入_表空间_09

建立表空间

Createtablespacedatafile'D:\app\Administrator\oradata\sunlichengdata\myyyjc.dbf'size10m autoextendon;

删除表空间

--Drop tablespace myyyjc including contents and datafiles cascade constraints;

建立新用户

createuseridentifiedbydefaulttablespace;

授权

grantconnect,resourceto;

grantdbato;

吊销授权

--Revoke dba from slc;

4 导出原数据库结构和数据

然后,以老用户yyjc登录系统导出数据库结构和数据;

plsql 数据转mysql数据 plsql数据导入_数据_10

工具à导出用户对象(U)

此步骤导出的是sql文件---建表语句(包括存储结构)。

plsql 数据转mysql数据 plsql数据导入_数据_11

plsql 数据转mysql数据 plsql数据导入_plsql 数据转mysql数据_12

plsql 数据转mysql数据 plsql数据导入_数据库_13

工具à导出表;

plsql 数据转mysql数据 plsql数据导入_表空间_14

此步骤导出的是dmp文件---表结构及数据;

这里PL/SQL工具包含三种方式导出Oracle表结构及数据,三种方式分别为:Oracle Export 、SQL Inserts、PL/SQL Developer 其中Oracle Export导出的.dmp是二进制文件,可跨平台,还能包含权限,效率不错,用的最为广泛。

plsql 数据转mysql数据 plsql数据导入_数据_15

plsql 数据转mysql数据 plsql数据导入_表空间_16

5 导入原数据库结构和数据到新表空间

为了检验,导出的这两个文件是否能用,使用新用户登录,将数据导入到新表空间试试;

plsql 数据转mysql数据 plsql数据导入_表空间_17

 

工具à导入表;

plsql 数据转mysql数据 plsql数据导入_表空间_18

工具à导入表;

plsql 数据转mysql数据 plsql数据导入_plsql 数据转mysql数据_19

我导入表结构时,没反应,可能是因为.sql文件中包含了有大字段(blob,clob,long),不能导出。不过我继续导入.dmp文件后,表和数据都导进去了;

plsql 数据转mysql数据 plsql数据导入_plsql 数据转mysql数据_20

查了一下:

以上值得注意的是,我们导出Oracle对象和数据的时候,默认还是原来Oracle数据库的表空间和数据库用户名称的,如果我们想要在新的数据库服务器中指定不同的表空间和数据库用户对象,那么我们就需要替换生成的sql脚本,并在第一步指定合理的表空间和数据库用户;也许也有可能是表空间不同的原因,但是数据是导进去了的,说明导出的备份数据是能用的;

 

PS:可以用下面sql(查某个数据库所有表的所有记录)检验一下两次的记录数是不是一样的哦:

use information_schema;
SELECT SUM(t.rows) total
from (
select table_name name,table_rows rows from tables 
where TABLE_SCHEMA = '数据库名' 
order by table_rows desc) as t ;