关于Oracle数据库单张表数据create table方式备份的风险

关于Oracle数据库单张表数据create table方式备份的风险:


1、备份表,此时不会备份默认值及主键等表结构信息
       create table 备份表名  as select * from 原表名; 
2、删除原表
       drop table 原表名;
3、恢复原表
       create table 原表名  as select * from 备份表名; 
       这种方式恢复数据,会造成原表结构丢失索引、主键、默认值等属性,引起数据插入、更新异常,影响业务系统使用。

建议日常运维时,数据库单张表备份恢复方式参考如下:
一. 通过cmd命令方式
备份:exp 用户名/密码@服务名 file=路径\文件名.dmp log=路径\日志名.log tables=(表1,...)
恢复:imp 用户名/密码@服务名 file=路径\文件名.dmp log=路径\日志名.log tables=(表1,...)

二.通过PL/SQL方式
方式1.通过Export Tables菜单
备份:PL/SQL菜单Tools -> Export Tables,选中要备份的表,然后在Oracle Export标签页选择导出路径,最后点Export将表数据及结构导出;
恢复:drop table 原表;
       Cmd命令窗口执行:imp 用户名/密码@服务名 file=路径\文件名.dmp log=路径\日志名.log full=y

方式2.分别备份数据、表结构(数据量大时不建议采用)
备份表数据
       在PL/SQL中查询表数据:select * from 需要备份的表名;
       然后导出查询结果,导出为sql形式的insert插入脚本。
备份表结构
       通过PL/SQL的sql窗口,右键要备份的表名,选‘view’,点击右下角‘view sql’,将表结构sql复制出来备用。
恢复表:drop table 原表;
       然后执行之前复制出来的表结构sql,创建表结构;
       最后执行之前导出的sql形式的表数据插入脚本。

注意:
1、恢复表备份后,需要检查数据库是否存在未编译对象(包括视图、存储过程、触发器等);
2、使用exp/imp需确保客户端NLS_LANG设置与服务端保存一致,避免因字符转换出现乱码问题。

你可能感兴趣的:(数据库)