简单的介绍下exp怎么使用,文章略简单,数据库版本是10g,导出错误解决方法在文章最后,首先带上参考链接:
http://www.cnblogs.com/zhangzhifeng/archive/2011/08/04/2126935.html http://blog.csdn.net/oscar999/article/details/7468153 http://daisybabay2012.blog.51cto.com/5007509/853730 http://www.cnblogs.com/lanzi/archive/2011/10/26/2225665.html
先新建一个普通用户测试用:
create user exp_test identified by test;
赋权:
grant resource,connect to exp_test;
查看系统所有用户:
select username from dba_users;
查看用户权限:
select privilege from dba_sys_privs where grantee='EXP_TEST' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='EXP_TEST' );
查看当前登录用户的缺省表空间
select username,default_tablespace from user_users;
查看用户使用的缺省表空间名称:
select username,default_tablespace from dba_users where username='EXP_TEST'
删除用户:
drop user exp_test cascade;
删除的时候遇到一个问题:
解决方法见博文:
http://794448033.blog.51cto.com/1541449/1030057
http://blog.csdn.net/tianlesoftware/article/details/4787074
下面开始介绍exp使用:
查看exp怎么使用:
cmd命令行界面下:
exp help=y
将数据库XE完全导出:
exp exp_test/test@xe file=f:/saveFile/tmp/fullxe.dump full=y
可知普通用户不能导出整个表:
使用dba身份的system导出整个数据库:
exp system/root@xe file=f:/saveFile/tmp/fullxe.dump full=y
导出速度有点慢,导出文件用nodepad++打开如下:
第一行是数据库版本号。
导出过程中发现Sys下面好多函数报错,解决方法在文章最后。
将数据库中tmd用户用户的表导出
exp system/root@xe file=f:/saveFile/tmp/tmdtables.dump owner=tmd
导出命令不要在后面添加分号:
如果想导出tmd用户的emp表
exp system/root@xe file=f:/saveFile/tmp/tmemptable.dump owner=tmd tables=emp log=f:/saveFile/tmp/exp_out.log
这么写是错误的。
正确的写法是:
exp system/root@xe file=f:/saveFile/tmp/tmemptable.dump tables=tmd.emp log=f:/saveFile/tmp/exp_out.log
导出多个不同用户的表如下:
exp system/root@xe file=f:/saveFile/tmp/tmemptable.dump tables=(tmd.emp,exp_test.emp) log=f:/saveFile/tmp/exp_out.log
将数据库中用户tmd的表emp中的字段deptno=10的数据导出:
exp system/root@xe file=f:/saveFile/tmp/expquery.dump tables=tmd.emp query=\" where deptno='10'\"
压缩使用compress=y,带日志log=filepath.log
exp system/root@xe file=f:/saveFile/tmp/expquery.dump tables=tmd.emp compress=y
可以发现,导出没有指定表时候,存储过程或者函数都会一起导出,如果不想要数据,只想要建表语句,可以这样写:
exp system/root@xe file=f:/saveFile/tmp/expemp.dump tables=tmd.emp rows=n
导出结果可以看到触发器也一起导出了,不想要触发器,可以这样:
exp system/root@xe file=f:/saveFile/tmp/expemp_no_trigger.dump tables=tmd.emp rows=n triggers=n
如果我只想导出用户tmd的所有表,不要存储过程和函数,不要数据,具体办法是在tables=()里面把要导出的表写一遍,如:
exp system/root@xe file=f:/saveFile/tmp/tmemptable.dump tables=(tmd.emp,--这里面把tmd所有表写一遍) rows=n triggers=n
举个例子:
exp system/root@xe file=f:/saveFile/tmp/tmemptable.dump tables=(tmd.XMLTYPE_TABLE,tmd.FILTER_PARAM_NAME,tmd.EXCEPTION_URL_LOG,tmd.FILTER_WHITE_LIST,tmd.TEST_LAG,tmd.VALID_ORDERS,tmd.BIG_ORDERS,tmd.REJECTED_ORDERS,tmd.TB_EMP,tmd.TB_A,tmd.TB_B,tmd.QRTZ_JOB_DETAILS,tmd.QRTZ_TRIGGERS,tmd.QRTZ_SIMPLE_TRIGGERS,tmd.QRTZ_CRON_TRIGGERS,tmd.QRTZ_FIRED_TRIGGERS,tmd.C3P0TESTTABLE,tmd.SYS_ADMIN,tmd.TBL_USER,tmd.T_PZ,tmd.TMP_MICHAEL,tmd.T_BLOB_TEST,tmd.TEST_USERS,tmd.EMP,tmd.DEPT,tmd.T_USER,tmd.PAGE_USERS,tmd.ACCOUNT,tmd.ANIMUS_PARAM_INFO,tmd.ANIMUS_URL_LOG,tmd.EXCEPTION_DIM_INFO,tmd.FILTER_INFO,tmd.PICK_PARAM_INFO,tmd.SYS_KEY_INFO,tmd.PICK_URL_LOG,tmd.PLUG_SAFE_BSDIM,tmd.PLUG_SAFE_BSLOG,tmd.PLUG_SAFE_BSRULE,tmd.SYS_FILTER_MAP,tmd.SYS_FILTER_PROP_MAP,tmd.SYS_INFO,tmd.T_TEST_USER,tmd.T_STR_TEST,tmd.TSQL_ARTICLE,tmd.USERINFO,tmd.USER_TEST,tmd.G_GROUP,tmd.G_STUDENT,tmd.TEST_INSERT,tmd.H_USER,tmd.T_STU,tmd.T_TEST,tmd.T_CLASS,tmd.TMYSQL_SCHEDULER_TEST,tmd.TMYSQL_USER_4TEST,tmd.TSQL_USER_BASIC_INFO,tmd.BXXX,tmd.T_COMPANY,tmd.TSQL_DECODE_TEST,tmd.SYS_AUTHORITIES,tmd.SYS_AUTHORITIES_RESOURCES,tmd.SYS_RESOURCES,tmd.SYS_ROLES,tmd.SYS_ROLES_AUTHORITIES,tmd.SYS_USERS,tmd.SYS_USERS_ROLES,tmd.T_ENUM_USER,tmd.TEST_DBMS,tmd.TMENU,tmd.TUSER,tmd.TEST_SQLLDR_USERS,tmd.T_PERSON,tmd.T_STUDENT_TEST,tmd.TORACLE_TEST_LOADDATA,tmd.TB2) rows=n triggers=n
可以使用sql查出当前登录用户所有的表:
SELECT max(substr(sys_connect_by_path('tmd.' || table_name, ','), 2)) FROM (SELECT table_name, rownum rn FROM user_tables) START WITH rn = 1 CONNECT BY rn = rownum;
dba可以这样写:
SELECT max(substr(sys_connect_by_path('tmd.' || table_name, ','), 2)) FROM (select table_name,rownum rn from dba_tables where owner='TMD') START WITH rn = 1 CONNECT BY rn = rownum;
只导出数据不要建表语句,这个我也不知道。
普通用户tmd使用exp时:
导出用户tmd的表:
exp tmd/tmd@xe file=f:/saveFile/tmp/current_tables.dump owner=tmd
普通用户导其他用户的表
exp exp_test/test@xe file=f:/saveFile/tmp/tmd_tables.dump owner=tmd rows=n
可见普通用户不能导出其他用户的表,不能导出整个数据库,其他的和上面例子一样。
如导出用户tmd所有表
exp tmd/tmd@xe file=f:/saveFile/tmp/currenttables.dump tables=(XMLTYPE_TABLE,FILTER_PARAM_NAME,EXCEPTION_URL_LOG,FILTER_WHITE_LIST,TEST_LAG,VALID_ORDERS,BIG_ORDERS,REJECTED_ORDERS,TB_EMP,TB_A,TB_B,QRTZ_JOB_DETAILS,QRTZ_TRIGGERS,QRTZ_SIMPLE_TRIGGERS,QRTZ_CRON_TRIGGERS,QRTZ_FIRED_TRIGGERS,C3P0TESTTABLE,SYS_ADMIN,TBL_USER,T_PZ,TMP_MICHAEL,T_BLOB_TEST,TEST_USERS,EMP,DEPT,T_USER,PAGE_USERS,ACCOUNT,ANIMUS_PARAM_INFO,ANIMUS_URL_LOG,EXCEPTION_DIM_INFO,FILTER_INFO,PICK_PARAM_INFO,SYS_KEY_INFO,PICK_URL_LOG,PLUG_SAFE_BSDIM,PLUG_SAFE_BSLOG,PLUG_SAFE_BSRULE,SYS_FILTER_MAP,SYS_FILTER_PROP_MAP,SYS_INFO,T_TEST_USER,T_STR_TEST,TSQL_ARTICLE,USERINFO,USER_TEST,G_GROUP,G_STUDENT,TEST_INSERT,H_USER,T_STU,T_TEST,T_CLASS,TMYSQL_SCHEDULER_TEST,TMYSQL_USER_4TEST,TSQL_USER_BASIC_INFO,BXXX,T_COMPANY,TSQL_DECODE_TEST,SYS_AUTHORITIES,SYS_AUTHORITIES_RESOURCES,SYS_RESOURCES,SYS_ROLES,SYS_ROLES_AUTHORITIES,SYS_USERS,SYS_USERS_ROLES,T_ENUM_USER,TEST_DBMS,TMENU,TUSER,TEST_SQLLDR_USERS,T_PERSON,T_STUDENT_TEST,TORACLE_TEST_LOADDATA,TB2) rows=n triggers=n
-----------------------------------------------------关于导出过程中可能出现的错误----------------------------
导出整个数据库时候,有很多sys报错,谷歌了下,找到了篇文章:
http://www.dba-oracle.com/t_compile_pl_sql_procedures.htm
上面有个脚本:
set heading off; set feedback off; set echo off; Set lines 999; Spool f:/saveFile/tmp/run_invalid.sql select 'ALTER ' || OBJECT_TYPE || ' ' || OWNER || '.' || OBJECT_NAME || ' COMPILE;' from dba_objects where status = 'INVALID' and object_type in ('PACKAGE','FUNCTION','PROCEDURE') ; spool off;
可以看到结果,老外也提供了一种方法:
Try to do it with catrep.sql. You could also try to execute utlrp.sql and post the result. Both as SYSDBA.
但是我试了下,还是有很多错误,最后找到了这篇博客:
http://blog.csdn.net/chensrao/article/details/6459687
按他说的执行:
@D:\oracle\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql @D:\oracle\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql
再导出tmd数据的时候,出现错误:
网上解决方法:
http://wenwen.soso.com/z/q318771546.htm
执行:
@D:\oracle\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catmetx.sql
现在可以导出用户tmd的表不报错。
但是如果尝试导出整个数据库数据时候,还是报错,如下:
这是最后时候才报错的,中间一直没出现错误,解决方法,
http://wuhuizhong.iteye.com/blog/1932098
SQL> DELETE FROM SYS.EXPACT$ 2 WHERE FUNC_PACKAGE = 'DBMS_AQ_IMPORT_INTERNAL'; 已删除6行。
再导出整个数据库:
exp system/root@xe file=f:/saveFile/tmp/ xedb.dump log=f:/saveFile/tmp/system_exp.log direct=y indexes=n rows=y CONSISTEN T=y buffer=104857600 compress=n feedback=100000
结果为:
上面那个执行结果很快,但是导出文件只有300k,全库完全导出可以使用
exp system/root@xe file=f:/saveFile/tmp/ fullxe.dump full=y
测试,结果为:
最后2次导出的文件大小为:
这里,我要想各位道歉,我在没有完全解决问题的情况下写博客,博客是快中午的时候写的,写的很急,出现问题后搜索了很久才找到答案,本人也是oracle的菜鸟,搜索到答案我就在文章后面加上一段,本文已经修改了3次,给各位造成麻烦了,下次我会确认有正确解决方案在写,谢谢大家。
全文完。
相关推荐
Oracle 数据库 exp/imp 命令详解 Oracle 数据库 exp/imp 命令是 Oracle 中最常用的命令之一。...exp/imp 命令是 Oracle 数据库备份和恢复的重要工具,了解其使用方法和参数可以帮助我们更好地备份和恢复数据库。
值得注意的是,虽然`exp`命令简单易用,但在Oracle 10g及以后版本中,Oracle推荐使用更强大的`expdp`(Data Pump Export)命令,它提供了更多的选项和更高的性能。`expdp`支持并行导出,能处理更大的数据量,还可以...
### Oracle数据导入导出技巧之imp/exp命令 #### 数据导入详解 ##### 1. 基础导入命令 - **基本语法**: ```shell imp 用户名/密码@数据库名 file=文件路径 ``` - **示例**: ```shell imp system/manager@...
2、本软件安装后,可使用自带的SQL Plus连接Oracle服务器,支持EXP、IMP命令。用户可以配合PLSQL Developer使用,为减小软件体积,没有对PL/SQL Developer打包,请用户自行下载。 3、本软件包含了OraOledb.Oracle.1...
在这个场景中,"Oracle_backup.rar_oracle_oracle exp t"标题暗示了我们将讨论如何使用`exp`命令创建Oracle数据库的备份,并且这个过程已经封装在了一个脚本文件`exp.txt`中。 首先,我们需要了解`exp`的基本语法。...
Oracle 11g R2 中 exp 无法导出空表的解决方法有四种:insert 一行再 rollback、设置 deferred_segment_creation 参数、使用 expdp 命令、使用 alter 语句。每种方法都有其优缺,选择哪种方法取决于具体情况。
Oracle 中 exp 与 imp 命令详解 Oracle 数据库中有两种备份方法:物理备份和逻辑备份。物理备份需要数据库运行在归档模式下,并需要大量的外部存储设备。逻辑备份则可以在数据库运行在非归档模式下,不需要外部存储...
逻辑备份,如使用Imp和Exp命令,不需要归档模式,备份过程简单,且可以不依赖额外的存储设备。 逻辑备份包括表模式、用户模式和全库模式。表模式备份适合于备份特定用户下的对象,而全库模式则涉及整个数据库的备份...
- 优点:速度快、易于归档、易于恢复到特定时间点、与归档配合使用可实现“最新状态”恢复、维护简单、安全。 - 缺点:仅提供到某时间点的恢复、备份期间数据库无法工作、可能需要大量磁盘空间或外部存储、无法按...
完成对空表分配Extent后,便可以正常导出所有表,包括那些之前为空的表,使用exp命令。值得注意的是,Oracle11g对密码是大小写敏感的,因此在进行数据库操作时必须确保密码的大小写与数据库中的记录完全一致。 通过...
Imp命令,即导入命令,则用于将Exp命令导出的数据文件导入到Oracle数据库中。备份时,根据业务需求和数据变更频率的不同,选择合适的备份策略至关重要。增量备份是一个备份前一次备份后发生变化的数据,它可以在不...
exp 工具的使用非常简单,我们只需要使用 exp 命令,并指定要导出的数据库对象和文件名。例如: exp username/password@database file=mydata.dmp 这个命令将从 Oracle 数据库中导出所有的数据到 mydata.dmp 文件...
Oracle即时客户端包含了一系列必要的组件,如OCI(Oracle Call Interface)、ODBC(Open Database Connectivity)、JDBC(Java ...使用多种编程语言(如C、C++、Python、Java等)编写应用程序来连接和查询Oracle数据库...
sqlplus不仅支持简单的SQL命令,还支持脚本执行,使得批量处理和自动化任务变得可能。 **sqlldr** 是另一个关键组件,全称为SQL*Loader,它是用于快速加载大量数据到Oracle数据库的工具。通过控制文件定义数据格式...
### Oracle数据库备份与导入导出命令详解 #### 一、Oracle数据库备份方法概述 Oracle数据库提供了两种主要的备份方式:物理备份和逻辑备份。 - **物理备份**:主要用于实现数据库的完整恢复,需要数据库运行在...
以上是关于Oracle数据库中`exp`和`expdp`命令的一些常用选项及其使用方法的详细介绍。这些命令对于数据库管理员来说是非常实用的工具,能够有效地帮助他们在日常工作中完成数据的备份、迁移和恢复等工作。理解和掌握...
- **操作系统联机热备份**:使用Oracle的`ALTER TABLESPACE BEGIN/END BACKUP`命令,同时备份数据文件。 - **RMAN(Recovery Manager)备份**:Oracle提供的备份工具,支持热备份、增量备份、多通道备份等多种高级...
##### EXP命令详解 `EXP`命令主要用于导出数据库中的数据。以下是一些常用的参数: - **icdmain/icdrows=y**:表示导出操作的用户名/密码。`icdrows=y`表示导出表中的行数据。 - **indexes=n**:表示不导出索引。 ...
在Oracle客户端和服务器端都可以运行EXP命令,客户端使用时需提供连接字符串,而服务器端通常不需要。导出过程中,EXP会同时导出对象的依赖关系,如索引、触发器和约束。 总的来说,Oracle的EXP和IMP工具虽然相对...
完成上述步骤后,就可以使用Oracle 9i客户端的exp命令来导出数据了。例如: ```bash exp user/password@service_name file=export_file.dmp log=export_log.txt ``` 其中,`service_name`是在步骤一中配置的网络...