ORACLE学习笔记(4) 数据导出和导入命令exp和imp

一、安装oracle客户端并配置网络

配置完成后,oracle安装目录下的tnsnames.ora文件(如 C:\oracle\ora92\network\ADMIN\tnsnames.ora)的内容为(oracle 8i或更高版本):

# TNSNAMES.ORA Network Configuration File: c:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

与此相关的一个知识点:PLSQL Developer登录的Database选项即填写ORA

命令行连接:conn system/xxxx@ORA; 不要写成conn system/xxxx@192.168.1.100_ORA;

 

二、写备份脚本

exp命令,按用户模式导出。

exp system/password@ORA file=F:\abc.dmp owner=user1 log=F:\abc.log

imp命令,按用户模式导入。

imp system/password@ORA buffer=64000 file=F:\abc.dmp fromuser=user1 touser=user1 log=F:\abc.log

 

三、实践:导dmp到数据库并查看数据

1、选一台机器S安装数据库服务器端

查看dmp的日志,发现此dmp是从11g企业版11.2.0.4.0-64bit服务器版本导出来的,从网上查找此版本并安装到64位win7上。

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
. . 正在导出表                  XXXXX导出了     XXXX行
成功终止导出, 没有出现警告。

2、另一台机器C安装数据库客户端

10201_client_win32

通过”网络配置助手“配置连接串。测试,不通。然后就是查找问题。

原因是:oracle只在127.0.0.1上起监听。于是需要修改监听ip地址。

 (1)修改hosts文件:c:\windows\system32\drivers\etc\hosts。添加如下内容

格式: ip  主机名     

举例: 192.168.1.1    liming-PC

(2)修改监听文件listener.ora和tnsnames.ora。文件位置 F:\app\liming-PC\product\11.2.0\dbhome_1\NETWORK\ADMIN。把两者中的localhost改名主机名liming-PC。

(3)重启监听服务。

lsnrctl stop
lsnrctl start
lsnrctl status

以上步骤还可参考网络:http://blog.csdn.net/young_kim1/article/details/50402034

3、用客户端可视化工具建表空间和用户

可视化工具: Enterprise Manager Console

创建表空间,并在此表空间中创建用户,给用户connect 和 resource权限。

4、用imp命令以批处理方式导入

imp sys/xx$123@abc file=f:\a.dmp fromuser=qmcb touser=qmcb
imp sys/xx$123@abc file=f:\b.dmp full=y
imp sys/xx$123@abc file=f:\c.dmp full=y

 报错:

F:\>imp sys/xx$123@abc file=f:\a.dmp fromuser=qmcb touser=qmcb

Import: Release 10.2.0.1.0 - Production on 星期四 6月 29 16:50:02 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


IMP-00058: 遇到 ORACLE 错误 28009
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER用户名:

 以为是密码中有特殊符号$的问题。还是按提示输入用户名密码啥的,也不行。

那直接在cmd窗口导入呢?

我直接输入imp回车。报错:

Import: Release 10.2.0.1.0 - Production on 星期四 6月 29 16:43:12 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

用户名: sys

口令:

IMP-00058: 遇到 ORACLE 错误 12560

ORA-12560: TNS: 协议适配器错误

IMP-00000: 未成功终止导入

然后改成以下方式:

imp liming/123456@abc file=f:\a.dmp full=y
imp liming/123456@abc file=f:\b.dmp full=y
imp liming/123456@abc file=f:\c.dmp full=y

 还是不行,报错:

看了看网上,人家不都是这样导入的吗?怎么我的就报错?语法应该没问题呀!

再看网上。然后把liming用户的权限直接给了个dba,再试一下。成功了。参考资料:http://www.2cto.com/database/201604/497846.html

 

F:\>imp liming/123456@abc file=f:\a.dmp full=y

Import: Release 10.2.0.1.0 - Production on 星期四 6月 29 16:55:25 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件

警告: 这些对象由 ABC 导出, 而不是当前用户

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 ABC 的对象导入到 LIMING
. 正在将 ABC 的对象导入到 LIMING
. . 正在导入表                "aa"导入了      xxx 行
成功终止导入, 没有出现警告。


 

 

事后,我在想,虽然能imp了,但这里头究竟是什么道道我还是不知道。我又去度娘问了下“imp需要什么权限”。终于看到了应该是真正原因: 

IMPORT 

To use Import, you need the privilege CREATE SESSION to log on to the Oracle 
database server. This privilege belongs to the CONNECT role established during 
database creation. 
You can do an import even if you did not create the export file. However, keep in 
mind that if the export file was created by a user with EXP_FULL_DATABASE 
privilege, then you must have IMP_FULL_DATABASE privilege to import it. Both of 
these privileges are typically assigned to DBAs. 

EXPORT: 

To use Export, you must have the CREATE SESSION privilege on an Oracle 
database. To export tables owned by another user, you must have the EXP_FULL_ 
DATABASE role enabled. This role is granted to all DBAs. 

If you do not have the system privileges contained in the EXP_FULL_DATABASE 
role, you cannot export objects contained in another user’s schema. For example, 
you cannot export a table in another user’s schema, even if you created a synonym 
for it.

 

四、问题:高版本客户端dmp不了低版本数据库中的数据

在命令操作中发现,本地安装的Oracle 版本是Release 11.2.0.1.0,而数据库服务器端安装的Oracle 是Release 10.2.0.4.0


    由于Oracle的imp/exp组件的操作原则--向下兼容,且有一些规则:


    规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器;
    规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容);
    规则3:从Oracle 低版本Export的数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 10 到 Oracle 11.对于两个不相邻版本间进行转换,如从Oracle 9 到 Oracle 11,则应先将数据输入到中间版本-Oracle 10,再从中间数据库转入更高版本Oracle 11。

    最快捷的解决方案就是使用安装了10g Oracle 的机子,进行服务器上数据库数据的导出。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值