博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE学习笔记(4) 数据导出和导入命令exp和imp
阅读量:6340 次
发布时间:2019-06-22

本文共 4653 字,大约阅读时间需要 15 分钟。

一、安装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 ProductionWith 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=qmcbimp sys/xx$123@abc file=f:\b.dmp full=yimp sys/xx$123@abc file=f:\c.dmp full=y

 报错:

F:\>imp sys/xx$123@abc file=f:\a.dmp fromuser=qmcb touser=qmcbImport: Release 10.2.0.1.0 - Production on 星期四 6月 29 16:50:02 2017Copyright (c) 1982, 2005, Oracle.  All rights reserved.IMP-00058: 遇到 ORACLE 错误 28009ORA-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=yimp liming/123456@abc file=f:\b.dmp full=yimp 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=yImport: Release 10.2.0.1.0 - Production on 星期四 6月 29 16:55:25 2017Copyright (c) 1982, 2005, Oracle.  All rights reserved.连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith 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 的机子,进行服务器上数据库数据的导出。

 

你可能感兴趣的文章
唯一聚集索引上的唯一和非唯一非聚集索引
查看>>
Spark新愿景:让深度学习变得更加易于使用——见https://github.com/yahoo/TensorFlowOnSpark...
查看>>
linux磁盘配额
查看>>
NFS文件共享服务器的搭建
查看>>
%r 和 %s 该用哪个?
查看>>
小公司职场不是“切糕”
查看>>
play工程部署到云服务器
查看>>
ListView 取消点击效果
查看>>
CentOS 6.5下编译安装新版LNMP
查看>>
Android Picasso
查看>>
top命令
查看>>
javascript的作用域
查看>>
新形势下初创B2B行业网站如何经营
查看>>
初心大陆-----python宝典 第五章之列表
查看>>
sysbench使用笔记
查看>>
有关电子商务信息的介绍
查看>>
NFC·(近距离无线通讯技术)
查看>>
多线程基础(三)NSThread基础
查看>>
PHP的学习--Traits新特性
查看>>
ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
查看>>