使用dmp恢复oracle数据库导出dmp需要先清空现有表oracle数据库导出dmp吗

相关文章推荐:
oracle 导入dmp
oracle导入dmp时会遇到这样的错误,IMP-00017: following statement failed with oracle error 959:....IMP-00003: oracle error 959 encountered,ORA-00959: tablespace '***' does not exist,提示表空间不存在。经摸索发现,在导入包含大字段的表或分区表时,会出现这个错误(不知还有没有其它情况?),而其它普通的表则能正常导入成功。
一般的解决方法有两个:
1、新建表空间,再导入;或把现有表空间改名,导入...
阅读(20726) 回复(0)
其他文章推荐
ITPUB官方微博:
数据库导入成功。。可在此运行ASP程序里调用存储过程读取为NULL
请问是怎么回事呀。。。
IN varchar2,
OUT number)
update number_status set max_no=max_no+1 where no_code=xx_
select max_no into numb from number_status where no_code=xx_
然后用parameters("numb").value=NULL
另外如果我跳过这步。。给numb一个值。。。整个网页就瘫痪了。。也不报错。...
阅读(2260) 回复(2)
工作需要,需要将5G的dmp格式的数据导入到oracle9i数据库,请教各位大牛们,请问怎么导入,小弟菜鸟一枚,刚接触oracle,不大懂,附上该dmp文件的备份日志信息:
连接到: oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
注: 将不导出...
阅读(1054) 回复(3)
各位大哥,帮忙看下,我从oracle中导出一表,后缀后为dmp;现在想把这张表导入到mysql中,请问该如何操作呀?
阅读(5731) 回复(2)
不知道为什么 ,在做dmp文件导入时,虽然可以显示可以导入,但是会报有错。
completed with 2 error(s) at ...
是不是我在数据导入时没做相关设置。
阅读(1803) 回复(0)
得到一个dmp文件,里面只有表a,我在oracle 10g导入的时候出现以下问题:
用plsql developer导入,勾选commit,ignore,rows其他为n,导入到400多万条的时候,提示某个字段有非空约束,但导入数据含空值,所以无法导入
1.为什么表a某个字段有非空约束,但还有空值记录?这种情况成立吗?为什么?
2.我导入的时候勾选了ignore,为什么oracle不会把空值的记录跳过继续到后面的?
3.如果我想在自己机上先建立表a,把约束去掉,再...
阅读(2688) 回复(6)
一、什么是oracle字符集
oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。oracle 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。它
阅读(780) 回复(0)
解决:使用notepad ++ 打开该dmp文件,修改开头的版本信息与目标数据库一致,保存即可。
阅读(270) 回复(0)
描述:本文主要记录了oracle数据库的字符集问题,也涉及作为服务器操作系统的UNIX/LINUX、CentOS或者Windows的字符集与oracle字符集之间的关联关系。
oracle数据库的字符集问题不算是大问题,但也是一个头疼的问题。这是因为有这么三个原因:一是oracle数据库在安装时指定好字符集之后一般不能更改,二是字符集问题涉及服务器与客户
阅读(180) 回复(0)
阅读(2400) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题如何用现有的full dmp重建一个oracle数据库_百度知道
如何用现有的full dmp重建一个oracle数据库
手头有个oracle全备份文件,用exp full=y导出的,现在需要重建一个新的数据库,该如何操作?只需要一个空库然后imp full=y么?另外,在imp恢复一张表的时候,如果原表内有一些新增数据,但是已不需要,是否要在导入前清空该表?
提问者采纳
1.在做full dmp导入时,如果是新建的空库,直接imp是不行的。首先要根据你full dmp时的用户名,然后在空库中创建此用户名,还要赋予此用户名相应的权限。一个推荐的办法是,当你做完某个用户下的full dmp后,将源库中的此用户的创建sql语句也导出,我记得是导出为pdc文件,其实也就是sql语句,然后在空库中运行此pdc文件,即可完成此用户的创建和权限的赋予。用户创建完毕,再进行full dmp。当然,如果此用户的对象权限设计的其他用户下的对象,比如其他用户的表的操作,那么,相应的权限赋予sql语句会失败,但是不影响你的full dmp的导入。2.清空与否没关系,这个问题不大。如果不需要,清空也行。
提问者评价
谢谢,原库的用户创建语句怎么导出呢?
其他类似问题
为您推荐:
oracle数据库的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁mysql数据库清空表格中数据恢复--数据恢复_数据恢复软件_北京北亚数据恢复中心_
&&北京总部:
&&天 津 部:
&&上 海 部:
&&深 圳 部:
&&广 州 部:
&&重 庆 部:
&&南 京 部:
&&其它地区:
您当前的位置: &&
mysql数据库清空表格中数据恢复
数据库被误删除时有发生,数据恢复变得非常重要像oracle数据库,我们常用的办法就是采用闪回flashback,或者通过logmnr在分析日志完成数据的恢复,但是在mysql中,数据的恢复变成了很困难的一件事情。有一次,同事的数据库由于开发人员的数据订正误操作,导致了一张表的所有数据被清空,由于该库的数据容量已经达到了几百G,从备份中恢复需要很长的时间,所以联系到我帮助恢复,由于数据库采用的是row模式,删除的操作在binlog中会一行一行的记录,所以恢复操作就是将binlog中的内容进行解析为对应的插入语句恢复步骤如下:1.用mysqlbing将binlog文件进行解析:mysqlbinlog -vvv /home/mysql/data3006/mysql/mysql-bin.000004 &/tmp/master.log.2.由于被误删除的表有13个字段,在加上两行delete和where,所以取其中的15行:grep “###” master.log. | grep “DELETE FROM master.agentgroup” -A 15 &/tmp/xx.log # more /tmp/xx.log### DELETE FROM master.del_table### WHERE### @1=15 /* INT meta=0 nullable=0 is_null=0 */### @2=1 /* INT meta=0 nullable=0 is_null=0 */### @3= 18:03:13 /* DATETIME meta=0 nullable=0 is_null=0 */### @4=1 /* INT meta=0 nullable=0 is_null=0 */### @5= 01:13:56 /* DATETIME meta=0 nullable=0 is_null=0 */### @6=’yahoo_yst’ /* VARSTRING(384) meta=384 nullable=0 is_null=0 */### @7=5259 /* INT meta=0 nullable=1 is_null=0 */### @8=22 /* INT meta=0 nullable=1 is_null=0 */### @9=b’0′ /* BIT(1) meta=1 nullable=0 is_null=0 */### @10=b’1′ /* BIT(1) meta=1 nullable=0 is_null=0 */### @11=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */### @12=b’0′ /* BIT(1) meta=1 nullable=1 is_null=0 */### @13=18170 /* INT meta=0 nullable=1 is_null=0 */3.用sed替换’###’:
# more /tmp/xx.logDELETE FROM master.del_tableWHERE@1=15 /* INT meta=0 nullable=0 is_null=0 */@2=1 /* INT meta=0 nullable=0 is_null=0 */@3= 18:03:13 /* DATETIME meta=0 nullable=0 is_null=0 */@4=1 /* INT meta=0 nullable=0 is_null=0 */@5= 01:13:56 /* DATETIME meta=0 nullable=0 is_null=0 */@6=’yahoo_yst’ /* VARSTRING(384) meta=384 nullable=0 is_null=0 */@7=5259 /* INT meta=0 nullable=1 is_null=0 */@8=22 /* INT meta=0 nullable=1 is_null=0 */@9=b’0′ /* BIT(1) meta=1 nullable=0 is_null=0 */@10=b’1′ /* BIT(1) meta=1 nullable=0 is_null=0 */@11=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */@12=b’0′ /* BIT(1) meta=1 nullable=1 is_null=0 */@13=18170 /* INT meta=0 nullable=1 is_null=0 */
4.替换’*/’为’,': # sed -i ‘s/\*\//\*\/,/g’ /tmp/xx.log # more /tmp/xx.logDELETE FROM master.del_tableWHERE@1=15 /* INT meta=0 nullable=0 is_null=0 */,@2=1 /* INT meta=0 nullable=0 is_null=0 */,@3= 18:03:13 /* DATETIME meta=0 nullable=0 is_null=0 */,@4=1 /* INT meta=0 nullable=0 is_null=0 */,@5= 01:13:56 /* DATETIME meta=0 nullable=0 is_null=0 */,@6=’yahoo_yst’ /* VARSTRING(384) meta=384 nullable=0 is_null=0 */,@7=5259 /* INT meta=0 nullable=1 is_null=0 */,@8=22 /* INT meta=0 nullable=1 is_null=0 */,@9=b’0′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@10=b’1′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@11=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */,@12=b’0′ /* BIT(1) meta=1 nullable=1 is_null=0 */,@13=18170 /* INT meta=0 nullable=1 is_null=0 */,DELETE FROM master.del_table5.替换日志中的最后一个’,'为’;':a.delete前加’;':sed -i ‘s/DELETE/;DELETE/g’ /tmp/xx.log # more /tmp/xx.logDELETE FROM master.del_tableWHERE@1=15 /* INT meta=0 nullable=0 is_null=0 */,@2=1 /* INT meta=0 nullable=0 is_null=0 */,@3= 18:03:13 /* DATETIME meta=0 nullable=0 is_null=0 */,@4=1 /* INT meta=0 nullable=0 is_null=0 */,@5= 01:13:56 /* DATETIME meta=0 nullable=0 is_null=0 */,@6=’yahoo_yst’ /* VARSTRING(384) meta=384 nullable=0 is_null=0 */,@7=5259 /* INT meta=0 nullable=1 is_null=0 */,@8=22 /* INT meta=0 nullable=1 is_null=0 */,@9=b’0′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@10=b’1′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@11=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */,@12=b’0′ /* BIT(1) meta=1 nullable=1 is_null=0 */,@13=18170 /* INT meta=0 nullable=1 is_null=0 */,;DELETE FROM master.del_tableb.delete 前的’,;’替换为’;':vi /tmp/xx.log —–&:%s/,$\n^ ;/;/gDELETE FROM master.del_tableWHERE@1=29 /* INT meta=0 nullable=0 is_null=0 */,@2=1 /* INT meta=0 nullable=0 is_null=0 */,@3= 18:03:13 /* DATETIME meta=0 nullable=0 is_null=0 */,@4=1 /* INT meta=0 nullable=0 is_null=0 */,@5= 13:05:00 /* DATETIME meta=0 nullable=0 is_null=0 */,@6=’alipay_front_jx’ /* VARSTRING(384) meta=384 nullable=0 is_null=0 */,@7=5267 /* INT meta=0 nullable=1 is_null=0 */,@8=58 /* INT meta=0 nullable=1 is_null=0 */,@9=b’0′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@10=b’1′ /* BIT(1) meta=1 nullable=0 is_null=0 */,@11=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */,@12=b’0′ /* BIT(1) meta=1 nullable=1 is_null=0 */,@13=NULL /* BIT(1) meta=0 nullable=1 is_null=1 */;DELETE FROM master.del_table@1,@2,@3….对应的是表的字段;6.最后将delete from table xx where 改为insert into xx values(”,”,”,”…..)既可以;通过上面的6个步骤就可以从binlog中恢复出删除的数据,看上去很繁琐,所以parse_binlog 工具就产生了,这个工具是@俊达 所写,可以将row模式的binlog转换为对应的sql语句:
mysql& USE T1Database changedmysql& delete from t1 where id&12;Query OK, 2 rows affected (0.00 sec)
mysqlbinlog -vvv /home/mysql/data3006/mysql/mysql-bin.000004 |/root/parse_binlog.pl &/tmp/parse.sql1more /tmp/parse/sql1–DML type: DELETE, num of cols: 2replace into t1.t1 values ( 10 , ‘ni hao1′);–DML type: DELETE, num of cols: 2replace into t1.t1 values ( 11 , ‘ni hao1′);
这样DBA就可以方便的进行数据的恢复了;
最近@plinux已经完成该mysql闪回方案的补丁,在row模式的binlog下,记录了每个ROW的完整信息,INSERT会包含每个字段的值,DELETE也会包含每个字段的值,UPDATE会在SET和WHERE部分包含所有的字段值。因此binlog就是个完整的逻辑redo,把它的操作逆过来,就是需要的“undo”;@吴炳锡 这个好人已经把他编译好了放在开源社区上,可以在这里下载:
mysql&+——————+———–+| Log_name | File_size |+——————+———–+| mysql-bin.000004 | 2293035 |+——————+———–+mysql& use t1Database changed
mysql& delete from t1 where id=15;Query OK, 1 row affected (0.00 sec)
mysql&+——————+———–+| Log_name | File_size |+——————+———–+| mysql-bin.000004 | 2293211 |+——————+———–+
# ./mysqlbinlog.txt -v –base64-output=decode-rows -B –start-position=2293035 /home/mysql/data3006/mysql/mysql-bin.000004 &/tmp/1.sql # more /tmp/1.sqlDELIMITER ;#:59:35 server id
end_log_pos 2293211 Xid = COMMIT/*!*/;#:59:35 server id
end_log_pos 2293143 Table_map: `t1`.`t1` mapped to number 1584#:59:35 server id
end_log_pos 2293184 Delete_rows: table id 1584 flags: STMT_END_F### INSERT INTO t1.t1### SET### @1=15### @2=’ni xxx’DELIMITER ;
版权所有 北京北亚宸星科技有限公司
全国统一客服热线:
北京总部:北京市海淀区中关村大街11号E世界C座879室假设数据用户USER1使用默认表空间TS1,用户USER2使用默认表空间TS2,现在将USER1的数据导入到USER2,要求使用表空间TS2。通过IMP命令参数tablespaces指定表空间是不行的,其他复杂方法要修改配额什么的,麻烦。整理了一下,大致有以下几种方法可以:
1. 有一个简单的方法,适用于数据比较少的情况:直接使用UltraEdit打方DMP文件,默认是16进制,切换成文本模式,将里面的:TABLESPACE &TS1&全部替换成TABLESPACE &TS2&,然后再导入,不用加什么tablespaces=TS2之类的参数即可,当然加了也无所所谓。
C:\&IMP USER2/USER2 log=C:\plsimp.log file=D:\database\USER1.dmp fromuser=USER1 touser=USER2 ignore=yes tablespaces=TS2
不过有个缺点,如果DMP文件有几百M甚至几G,嘿嘿嘿嘿,不知道UltraEdit有啥反应?
2. 还有另外一种比较好的方法。基本思路都是先从USER1导出表结构(DMP或者SQL脚本),然后在USER2用户下创建空的数据库表(如果是DMP,则参见方法1;如果是SQL脚本,则稍作修改后以USER2用户执行即可),再将包括数据的DMP导入,注意要设IGNORE=Y,并指定FROMUSER和TOUSER。具体实现方法为:
(1)先用工具导出USER1的表结构(不要导出CHECK和FK,特别是FK!),TOAD和PL/SQL都有此功能。PL/SQL Developer导出表结构:Tools--&Export User Objects(导出用户对象) --&选择要导出的表(包括Sequence等)--&.sql文件,导出的都为sql文件。或者使用imp的indexfile选项生成表结构的SQL脚本。
(2)在USER2用户下创建相同的表结构
(3)导入完整的数据
PL/SQL Developer工具操作步骤:
(1)导出表结构:
Tools--&Export User Objects(导出用户对象) --&选择要导出的表(包括Sequence等)--&.sql文件,导出的都为sql文件
(这一步也可以导出一个只包括表结构的DMP文件。)
(2)导出表数据:
Tools--&Export Tables--&选择表,选择SQL Inserts--&.sql文件
(这一步也可以导出一个包括表结构和数据或者只有数据没有表结构图的DMP文件。)
(3)导入表结构:
执行刚刚导出的sql文件,记住要删掉table前的用户名,比如以前这表名为sys.tablename,必须删除sys
(如果是只包括表结构的DMP文件,则使用UltraEdit修改表空间,再导入。如方法1)
(4)导入表数据:
执行刚刚导出的sql文件
(如果是DMP文件,则直接导入即可,注意要设IGNORE=Y,并指定FROMUSER和TOUSER。)
IMP命令操作步骤:
首先:exp user/pw file=file.dmp owner=yourUser1
然后:imp user/pw file=file.dmp indexfile=xxxx.sql fromuser=yourUser1 touser=yourUser2
随后:修改xxxx.sql中的关于有表空间设置的地方为新的表空间,并去掉相关的注释(rem),然后执行xxxx.sql创建相关对象。
最后:imp user/pw file=file.dmp fromuser=yourUser1 touser=yourUser2 ignore=y
一直以来,我都认为只要指定用户的默认表空间,向该用户导入数据时,会自动进入到默认表空间。后来发现从System导出的dmp文件在导入时,即使指定新用户的默认表空间,还是要往System表空间中导数据。
上网搜了一下,还是有解决方法的,常见的方法如下:
SQL& create user myhuang identified by myhuang defaul
SQL& grant resource,
SQL& //赋DBA权限
SQL& revoke unlimited tab//撤销此权限
SQL& alter user myhuang quota 0//将用户在System表空间的配额置为0
SQL& alter user myhuang quota //设置在用户在myhuang表空间配额不受限。
经过上述设置后,就可以用imp导入数据,数据将会进入指定的myhuang表空间:
C:\Documents and Settings\myhuang&imp system/123456@vdb fromuser=lnxh tous
er=myhuang file=G:\myhuang\lnxh.dmp ignore=y grants=n
顺便说两个小问题:
(1)IMP-00003: 遇到 ORACLE 错误 1658
ORA-01658: 无法为表空间 MYHUANG 中的段创建 INITIAL 区
通常这个问题可以通过Resize增加表空间数据文件大小来解决。
(2)删除表空间
SQL& drop tablespace myhuang including co
在10g中实验,drop表空间之后,仍然需要手动去删除数据文件。
//补充————————————————————————
另一种比较好的方法:
Create tablespace {tbs_name} datafile ‘{file_path}’ size 500M autoextend on next 10M;
Create user {u_name} identified by {u_pwd} default tablespace {tbs_name} quota unlimited on {tbs_name};
Grant connect,imp_full_database to {u_name};
Imp {u_name}/{u_pwd}@{local_svrname} fromuser={from_user} touser={u_name} file={dmp_file_path} ignore=y tablespaces={tbs_name};
此方法不需要授予新用户DBA权限。
此方法的存在的问题是:可能导致包含BLOB、CLOB字段的表导入失败,这种情况下可以先用sql脚本将表结构建立起来,再导入相应的数据。
一直以来,我都认为只要指定用户的默认表空间,向该用户导入数据时,会自动进入到默认表空间。后来发现从System导出的dmp文件在导入时,即使指定新用户的默认表空间,还是要往System表空间中导数据。
上网搜了一下,还是有解决方法的,常见的方法如下:
SQL& create user myhuang identified by myhuang defaul
SQL& grant resource,
SQL& //赋DBA权限
SQL& revoke unlimited tab//撤销此权限
SQL& alter user myhuang quota 0//将用户在System表空间的配额置为0
SQL& alter user myhuang quota //设置在用户在myhuang表空间配额不受限。
经过上述设置后,就可以用imp导入数据,数据将会进入指定的myhuang表空间:
C:\Documents and Settings\myhuang&imp system/123456@vdb fromuser=lnxh tous
er=myhuang file=G:\myhuang\lnxh.dmp ignore=y grants=n
顺便说两个小问题:
(1)IMP-00003:&遇到&ORACLE&错误&1658
ORA-01658:&无法为表空间&MYHUANG&中的段创建&INITIAL&区
通常这个问题可以通过Resize增加表空间数据文件大小来解决。
(2)删除表空间
SQL& drop tablespace myhuang including co
在10g中实验,drop表空间之后,仍然需要手动去删除数据文件。
//补充————————————————————————
另一种比较好的方法:
Create tablespace {tbs_name} datafile ‘{file_path}’ size 500M autoextend on next 10M;
Create user {u_name} identified by {u_pwd} default tablespace {tbs_name} quota unlimited on {tbs_name};
Grant connect,imp_full_database to {u_name};
Imp {u_name}/{u_pwd}@{local_svrname} fromuser={from_user} touser={u_name} file={dmp_file_path} ignore=y tablespaces={tbs_name};
此方法不需要授予新用户DBA权限。
此方法的存在的问题是:可能导致包含BLOB、CLOB字段的表导入失败,这种情况下可以先用sql脚本将表结构建立起来,再导入相应的数据。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:59437次
排名:千里之外
原创:14篇
转载:85篇
评论:25条
(3)(2)(4)(2)(4)(1)(3)(2)(2)(1)(1)(4)(2)(1)(2)(4)(2)(3)(2)(3)(1)(1)(1)(3)(4)(40)(1)}

我要回帖

更多关于 dmp恢复 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信