这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮。

本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西。

你的导出:exp yc/yc@orcl flie=d:/expdat.dmp log=d:/explog.log full=y 
buffer=100000000 
    用户名/密码 文件=绝对地址 日志=地址 全部=y/n 缓存大小
你的导入:imp yc/yc@orcl file=F:/directory/expdat.dmp 
log=F:/directory/implog.log fromuser=yczfw ignore=Y buffer=100000000

看日志解决问题很重要。

-------------------------

[from]oracel数据导出导入 - StarkSoft - 博客园
http://www.cnblogs.com/starksoft/p/5009805.html

一、导出模式(三种模式)及命令格式

1、 全库模式

exp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\文件名.log

2、 用户模式(一般情况下采用此模式)

exp 用户名/密码@网络服务名 owners=(用户1,用户2,用户3,…) file=路径\文件名.dmp 
log=路径\文件名.log

3、 表模式

exp 用户名/密码@网络服务名 tables=(表名1,表名2,表名3,…)file=路径\文件名.dmp 
log=路径\文件名.log

4、 另外,还可以只导出某个表空间

exp 用户名/密码@网络服务名 tablespaces=(表空间1,表空间2,表空间3,…) file=路径\ 
文件名.dmp log=路径\文件名.log

二、导入模式(三种模式)及命令格式

1、 全库模式

imp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\ds110.log

2、 用户模式(一般情况下采用此模式)

imp 用户名/密码@网络服务名 file=路径\文件名.dmp fromuser=导出的用户名 touser=导 
入的用户名 log=路径\ds110.log

3、 表模式

imp 用户名/密码@网络服务名 tables=(表名1,表名2,表名3,…)file=路径\文件名.dmp 
fromuser=导出的用户名 touser=导入的用户名 log=路径\ds110.log

4、 另外,还可以只导入某个表空间

imp 用户名/密码@网络服务名 tablespaces=(表空间1,表空间2,表空间3,…) file=路径\ 
文件名.dmp fromuser=导出的用户名 touser=导入的用户名 log=路径\ds110.log

----------------------

出现问题及解决 集锦

1.解决Oracle 11g在用EXP导出时,空表不能导出

http://www.cnblogs.com/live365wang/p/4482585.html

(1)11g,可以考虑用expdp/impdp

(2) 解决方法:

    1、先查询一下当前用户下的所有空表
    select table_name from user_tables where NUM_ROWS=0;
    2、用以下这句查找空表
    select 'alter table '||table_name||' allocate extent;' from user_tables  where num_rows=0

        把查询结果导出,执行导出的语句

        -----------
        set heading off;
        set echo off;
        set feedback off;
        set termout on;
        spool C:\allocate.sql;
        Select 'alter table '||table_name||' allocate extent;' from user_tables where 
        num_rows=0;
        spool off;
      -----------

      'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
      --------------------
      alter table AQ$_AQ$_MEM_MC_H allocate extent;
      alter table AQ$_AQ$_MEM_MC_G allocate extent;
      alter table AQ$_AQ$_MEM_MC_I allocate extent;
       ……

      alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;

        查看sql文件,去掉.sql文件里的 SQL>语句,只留sql语句,执行SQL;SQL>@ C:\allocate.sql
    3、然后再执行
    exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp  log=/home/oracle/exp_smsrun.log 成功!

2.

   在6楼的提醒下,经过观察和上网查询,确实如6楼所说,在oracle11g中如果表为空,是不 会导出到dmp文件中: 我这这样解决的
    1). 利用PL/SQL Developer 中的 Reports > Objects > Tables 分析工具,可以通过 Num Rows 查看到记录为 0 的表
    2). 在 PowerDesigner 中建立逆向工程,选中刚才的表,执行测试数据的插入,然后再执行删除旧记录的操作,就使数据库完成了给表分配数据段的工作,就可以正常导出了。

    提示: 第一步分析表的功能,建议在服务不忙时再做,因为我们在执行完这个命令后,应用突然连接不上数据库了,后来查询得知,引用如下内容
“对表和索引的分析也需要占用系统资源,可能会影响到其他事务的运行。”

    “一些数据量小的数据表(数据字典表)就没有必要进行分析,对于一些数据量频繁变化的数据表倒是有必要经常进行分析,避免对执行计划的影响。”
重起服务后,就可以了

执行如下命令 alter system set deferred_segment_creation=false; 执行后,新建 
的表,即使数据为空,也会被导出了(旧表不起作用)

3.

假设在数据库实例中还有bbb、ccc、ddd用户;数据库还有ora、oracl实例,加full=y 
和不加有什么区别?
key:
full=y默认是禁止的。
1.如果加上“full=y”,将整个数据库全部导出,需要特殊的权限(具体什么权限没研究过 
),一般用system用户就足够了,普通用户是不可以的
2.不加“full=y”,默认导出连接数据库的用户数据库对象,比如:exp aaa/abc@oracle 
file=a.dmp,导出aaa模式下的所有数据库对象,bbb用户的数据就不会导出来 
3.你说的有多个用户,可以使用system来指定导出哪个用户的数据库对象,比如:exp 
aaa/abc@oracle file=a.dmp owner=(bbb,ccc),普通用户是不可以指定owner的
4.数据有多个实例的情况,这个要看你“@”后面是什么,如果@oracle,则在oracle实例上 
进行导出,@ora,则在ora实例上进行导出

4.

?oracle 一个用户如何分配2个表空间。具体怎么操作?
key:
alter user aaa
quota unlimited on inx
quota unlimited on tb;

如果要想更改用户在表空间的配额的话: alter user user_name quota size on 
tablespace_name
其中size可以是诸如‘32M’,‘2G’,‘unlimited‘ 等 unlimited 就是没有限制的

    1、一个用户只能属于一个表空间
    2、同一个数据库用例中,用户名是不能重复的
    3、不同用户中可以创建同名的表
    4、表空间创建后需要创建用户后才能使用,因为任何数据库对象都需要建立在一个数据用户上
    5、连接dba权限的用户可以直接访问其他用户的数据库对象,否则需要相关用户授权
    6、访问其他用户的数据库对象是时需要加上对象所属用户的用户名

/*第1步:创建临时表空间 */ 
create temporary tablespace user_temp 
tempfile 'D:\oracle\oradata\Oracle9i 
\user_temp.dbf' 
size 50m 
autoextend on 
next 50m maxsize 20480m 
extent management 
local; 
/*第2步:创建数据表空间 */ 
create tablespace user_data 
logging 
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' 
size 50m 
autoextend on 
next 50m maxsize 20480m 
extent management local; 
/*第3步:创建用户并指定表空间 */ 
create user username identified by password 
default tablespace user_data 
temporary tablespace user_temp;
/*第4步:给用户授予权限 */ 
grant connect,resource,dba to username;

5.

oracle备份空表数据时候报错
即将导出 yc  的表通过常规路径... . . 正在导出表 DEF$_AQCALL EXP-00008: 遇到 
ORACLE 错误 6550 ORA-06550: 第 1 行, 第 19 列: PLS-00201: 必须声明标识符 
'SYS.DBMS_DEFER_IMPORT_INTERNAL'
key:
查看一下对象SYS.DBMS_DEFER_IMPORT_INTERNAL是否存在
select object_type,object_name from dba_objects where object_name like 
'DBMS_DEFER_IMPORT%';
存在的可能性比较大
如果存在,应该是你导出时那个用户权限丢失了,你需要给他们权限,假设你导出是用yc用户
grant exp_full_database to yc;
grant execute on SYS.DBMS_DEFER_IMPORT_INTERNAL to yc;

再重新导出试一下
我觉得你导出时用的
不是yc用户

======== 其他知识 汇总===========

exp/imp buffer大小设置的问题:buffer_size = rows_in_array * maximum_row_size
key:
就是起到批量提交的作用
表的行数*最大一的行所占字节
一般如实比较大的dmp,需要设定一下,一般100m左右

现在更多使用的是expdp即数据泵方式,客户端的exp方式已经不再适应多用户迁移。
追问
用expdp导出整个数据库也会停在
‘处理对象类型DATABASE_EXPORT/SYSTEM_PROCOBJACT/PROCOBJ’。
EXPDP USERID='system/manager@TEST as sysdba' directory=DATA_PUMP_DIR 
dumpfile=daochu.dmp parallel=4 full=y

expdp/impdp  20G的库 恢复就得快30-40分钟。
exp 500M,用了10分钟。

exp 用户名/密码@地址:端口/实例名

查询ORACLE数据库名:SQL> select name from v$database。
查看实例名:SQL> select instance_name,host_name from v$instance。

查看exp卡住等待:
select sid,event,p1,p2,p3 from v$session_wait where sid='exp会话'
-------------
需要使用有DBA权限的用户,用如下语句查询:
查找用户默认的表空间
select username,default_tablespace from dba_users; 
设置默认的表空间的语法如下:
alter database default [temporary] tablespace tablespace_name;
如果使用temporary关键字,则表示设置默认临时表空间;如果不适用该关键字,则表示设 
置默认永久性表空间。
修改用户默认表空间
alter user 用户名 default tablespace mytds01表空间名
-------------

查看表空间是否存在
select tablespace_name from dba_tablespaces where tablespace_name="YCWS" 
系统用户才能查表空间的
select name from v$tablespace;
知道表名,查看该表属于那个表空间
select tablespace_name,table_name from user_tables where table_name='emp'

好多sql 用什么查什么就欧了

====================

参考:

1.oracle权限全集 http://blog.itpub.net/29863023/viewspace-1327586/

2.如何彻底删除Oracle数据库,以创建相同实例名称的库 
http://blog.itpub.net/7192724/viewspace-1228347/

3.用exp_imp远程操作数据库,附帶Oracle数据导入导出imp/exp詳解
http://blog.csdn.net/heirenheiren/article/details/10199233

4. oracle IMP EXP的技巧,和解决IMP-00003: 遇到 ORACLE 错误 1435 ORA-01435: 用户不存在
http://blog.csdn.net/johnstrive/article/details/5483571

5.imp时候,只导入某表的表结构,而不导入此表数据
http://biancheng.dnbcw.info/oracle/149103.html

6.ORACLE EXP IMP 导入导出数据 解决如何导出空表
http://blog.csdn.net/yudehui/article/details/8078294

7.oracle11g Exp Imp 后,发现表少了很多 
http://bbs.csdn.net/topics/360025948

Oracle 导入导出--and一些知识,备忘的更多相关文章

  1. ORACLE导入导出数据dmp

    imp testwms3/isc@TESTGMMC FILE=C:\ZKGL_201407012334.dmp ignore=y fromuser=GMMCZKGL touser=testwms ta ...

  2. Oracle导入导出之dmp

    Oracle导入导出有两种方式,分别是imp/exp与impdp/expdp. 1.imp/exp exp scott/tiger file=d:\test.dmp log=d:\test.log o ...

  3. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  4. oracle导入导出功能

    1.普通版:oracle导入导出功能:导出exp 用户名/密码@SID file=f:\xx.dmp owner=用户名 导入imp 用户名/密码@SID full=y file=f:\xx.dmp ...

  5. oracle导入导出 dmp文件

    oracle导入导出 dmp文件: 打开cmd窗口,在cmd窗口下,按照个人需要输入以下对应的命令: 1.imp 用户名/密码@网络服务名 file=XXX.dmp fromuser=XXX tous ...

  6. oracle导入导出操作

    1,获取oracle导入导出帮助: imp help=y 2,导出命令 exp 用户名/密码@数据库实例 file=文件路径名 如: exp sys/password@orcl file=d:\dat ...

  7. JVM内存知识备忘

    又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...

  8. Oracle导入导出

    Oracle 10g 已经引入了数据泵(点击Data Dump)技术,这项技术和之前的exp/imp有哪些好处呢,简单的来说就是恢复和备份速度非常快: 在说明数据泵的使用方法之前,我们先来了解二者的区 ...

  9. Oracle导入导出dmp文件

    目 录 目             录...3 1      说明...3 2      导出dmp文件...3 3      导入dmp文件...5 3.1            环境准备...5 ...

随机推荐

  1. Dedecms有效防止采集的两个实用办法

    现在的采集真是无处不在,尤其是对一些原创性站点,真是烦透了这些采集的人们,如何预防和防止采集呢,站长们!今天先说一下dedecms防采集的办法. 1.随机模版 方法:你多复制N多模版,在body标记附 ...

  2. jquery 跨域访问问题 转

    http://zld406504302.iteye.com/blog/1677937 服务器,jsp <%@ page language="java" contentType ...

  3. JSON格式化与serialize序列化

    一.JSON格式化 1. JSON是什么 JSON是一种数据的存储格式,用来沟通客户端Javascript和服务端PHP的交互.我们把用PHP生成JSON后的字符串传给前台Javascript,Jav ...

  4. Android版本

    Android自从3.0版本开始引入了Fragment的概念,它可以让界面在平板上更好地展示   Fragment建议继承android.app.Fragment的包,另外support.v4包主要是 ...

  5. Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法

    解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...

  6. Excel表格导入数据

    步骤: 1,选择要插入的数据库--右键--任务--导入数据 2,点击下一步,选择数据源,excel文件路径,和版本信息(注:使用2010及以上版本的office,请先将格式转换为03 或07格式的以便 ...

  7. ios企业应用部署

    最近公司要整一套企业内部用的应用,ios版本不上线要求可以随时下载使用,先是申请了企业者开发账号,然后发布应用,部署在自己服务器上供用户下载安装. 第一步:准备好应用相关的东西,基本上就是两个文件,x ...

  8. sfliter__except_handler4

    sfliter源码在vs08中编译 出现 错误error LNK2019: unresolved external symbol __except_handler4 referenced in fun ...

  9. ROS语音交互(四)接入图灵语义理解

    首先程序中会用到Json,curl 安装相应的库 $ sudo apt-get install libcurl3 libcurl4-openssl-dev$ sudo apt-get install ...

  10. JS技术大全

    事件源对象:event.srcElement.tagName  event.srcElement.type 捕获/释放:event.srcElement.setCapture();  event.sr ...