高手们能给我看看我的这个备份脚本和恢复脚本正确吗?

时间:2022-08-06 08:54:07
我的环境是Linux AS4 + Oracle10g,数据库正确安装,可以正常工作,创建用户lzassist,表空间为lz_system,临时表空间为lz_temp,各自对应的数据文件是lz_data.dbf和lz_tempdata.dbf,我们的数据都是存放在这个表空间中
    我的备份(EXP)脚本内容是:
    exp "'sys/zrc775fp as sysdba'" owner=lzassist file=/oraclesoftware/oracle/orcl/a.dmp log=/var/backup.log

     这个脚本只能备份lzassist用户的数据,可以正常备份。

     我的恢复(IMP)脚本内容是:
     imp userid=lzassist/zrc775fp ignore=y file==/oraclesoftware/oracle/orcl/a.dmp log=/var/backup.log

     这个脚本也可以正常的使用。

     我有以下几个疑问需要高手帮忙解答一下:
     1、我以前备份数据库都是“全库”备份,就是
   exp "'sys/zrc775fp as sysdba'" full=y inctype=complete file=XXX log=XXX

     这样备份我也知道是很好的,可是当我要进行恢复的时候,就是
   imp "'sys/zrc775fp as sysdba'" ignore=y full=y inctype=restore file=XXX log=XXX

     这时候就会报错,后来我查了一下网上的资料,说报错的原因是不能导入数据,因为存在约束。
     我也不会解决,就没有再使用“全库”备份的方式——我也想啊!!!!——基于这一点,希望高手们能给我一个建议,当我进行了全库备份以后,应该怎么样才能成功的进行恢复呢?

     2、上面我写的那两个脚本是否合理?在实际运用中是否可以安全的备份我们的数据呢?如果还有欠缺的地方,是什么地方呢?应该怎么改进一下呢?(我们不能用rman,因为数据库不能停)

    我们所有的表以及记录(数据)都是存放在lzassist这个用户对应的表空间中的,所以我觉得:只需要备份这个用户中的所有的表就可以了。不知道这个认识是否正确,请高手指教。

     3、网上还有一种说法,就是说我现在的这种只备份某一用户的所有的表的方式,当需要恢复时,要“先删除用户,再删除对应的表空间”,然后再用imp进行恢复。我不知道这种说法对不对。我现在的恢复脚本也没有“先删除用户,再删除对应的表空间”呀,可是实际效果也是可以正确的恢复数据的,所以我比较茫然。

     4、我的这两个脚本是测试用的,因为我们的数据还没有导入进来,我只是在lzassist用户下创建了一个只有两个字段的表,这么简单的环境下,我的脚本能运行正常,我想是不足以说明问题的,我们的数据库要有37张表,表间关联很多的,各个表的字段也是很多的,所以我担心我的这两个脚本能不能在那种“实际”的情况下也是可以使用的这个问题比较担心,想听听高手的意见。


     最后,谢谢每一个能看完我这个帖子的朋友,谢谢大家这么有耐心!!!!同时,我也很真诚的希望大家能帮帮我,我是搞软件开发的,对数据库不是很懂,可是公司要我做一部分的DBA工作,很多情况和知识技术对我来说很是陌生,所以我在这里希望得到大家的帮助!先谢谢大家了

6 个解决方案

#1


不是很懂oracle ,但是可以帮你把帖子顶上去的,顺便学习!

#2


耐心的看完了,我也剛開始學ORACLE,一起加油!
關注中.
UP

#3


高手们帮帮我好吗,谢谢了,真得很急的,在线等!!!!!!!

#4


虽然不是很懂,但帮顶~~~~

#5


1、全恢复的时候,因为有系统用户,如system,system用户是不能被覆盖的,所以,导入过程要报错,不过,可以不理它。
2、我们不能用rman,因为数据库不能停 rman备份也不用停止数据库啊,不知道楼主这理论从何而来。exp、imp这种备份方式存在弊端,不能恢复备份点到出错点之间的数据,应加入归档
3、先删除用户,再删除对应的表空间,这样,能保证用户下面信息是空的,能完全正确导入导出文件。否则,过程中会报错的,比如,违反唯一性约束等。
4、表多也没问题。exp和imp能全收,美中不足同2,恢复时可能造成数据丢失。

#6


如果是想备单个用户的数据,不要用 sys 等dba账户, 直接用原来的用户来 exp, imp,
在 oracle 10g, 其实用 expdp 等工具, 速度会更快。 

另外,其实在归档模式下, 用rman是更好的方法, 不用停数据库的。 

>>当需要恢复时,要“先删除用户
建议删除, 重建用户 

>>4、我的这两个脚本是测试用的
  就我的做法, 一般导入导出的时候, 加 INDEXES=N CONSTRAINTS=N COMPRESS=Y
  导入数据后,再重新建立索引, 约束。

#1


不是很懂oracle ,但是可以帮你把帖子顶上去的,顺便学习!

#2


耐心的看完了,我也剛開始學ORACLE,一起加油!
關注中.
UP

#3


高手们帮帮我好吗,谢谢了,真得很急的,在线等!!!!!!!

#4


虽然不是很懂,但帮顶~~~~

#5


1、全恢复的时候,因为有系统用户,如system,system用户是不能被覆盖的,所以,导入过程要报错,不过,可以不理它。
2、我们不能用rman,因为数据库不能停 rman备份也不用停止数据库啊,不知道楼主这理论从何而来。exp、imp这种备份方式存在弊端,不能恢复备份点到出错点之间的数据,应加入归档
3、先删除用户,再删除对应的表空间,这样,能保证用户下面信息是空的,能完全正确导入导出文件。否则,过程中会报错的,比如,违反唯一性约束等。
4、表多也没问题。exp和imp能全收,美中不足同2,恢复时可能造成数据丢失。

#6


如果是想备单个用户的数据,不要用 sys 等dba账户, 直接用原来的用户来 exp, imp,
在 oracle 10g, 其实用 expdp 等工具, 速度会更快。 

另外,其实在归档模式下, 用rman是更好的方法, 不用停数据库的。 

>>当需要恢复时,要“先删除用户
建议删除, 重建用户 

>>4、我的这两个脚本是测试用的
  就我的做法, 一般导入导出的时候, 加 INDEXES=N CONSTRAINTS=N COMPRESS=Y
  导入数据后,再重新建立索引, 约束。