Oracle备份数据导入到其他的表空间(只设置默认表空间无效)

本文介绍如何在Oracle数据库中更改表空间,包括通过调整用户权限和直接修改DMP文件两种方式。首先介绍了设置用户默认表空间的方法,并讨论了权限配置的重要性。其次提供了修改DMP文件以变更表空间的替代方案。

     我们在导入一个Oracle备份的数据文件(*.dmp)到另外一个数据库的用户下时,如果需要更换表空间,可以采用下几个办法。

         假设导出用户名:EXP_USER         表空间为:EXP_TSPACE

               导入用户名:IMP_USER        表空间为:IMP_TSPACE

1、设置导入用户的默认表空间以及权限。 

a)建表语句如下:

create user IMP_USER

identified by "密码"
default tablespace IMP_TSPACE
temporary tablespace TEMP(临时表空间)
 

 

b)只是设置表空间,还是解决不了问题。你会发现,在使用imp命令导入时,导入的表还是建立在EXP_TSPACE表空间上。

原因是:导入的数据库也存在EXP_TSPACE表空间,同时IMP_SPACE也存在该表空间的使用权限。

可能原因IMP_USER用户的权限含有含有unlimited tablespace权限。(角色resource、dba包含此权限)。

i. 已存在用户,不改变其他权限

a) 不改变原有角色或权限,仅去掉无限表空间权限。

命令:revoke unlimited tablespace from IMP_USER;

b) 添加对IMP_TSPACE权限。

命令:alter user qcui quota unlimited on IMP_USER;

 

ii. 新建用户,给予最低权限

a) 以下是开发用户最低权限跟角色的参考:

角色:connect、exp_full_database、imp_full_database

权限:debug connect session(调试存储过程使用,非必须)

a) 命令语句参考:

		create user IMP_USER
		  identified by "密码"
		  default tablespace IMP_TSPACE
		  temporary tablespace TEMP
		  profile DEFAULT
		  quota unlimited on IMP_TSPACE;
		-- Grant/Revoke role privileges 
		grant connect to IMP_USER;
		grant exp_full_database to IMP_USER;
		grant imp_full_database to IMP_USER;
		-- Grant/Revoke system privileges 
		grant debug connect session to IMP_USER;
 

 

2、 直接修改dmp文件(不推荐)

a) 使用UE等文本工具软件,可打开并查看DMP文件内容。除部分数据或命令是二进制乱码外,普通的create table、insert语句都是明文。

b) 批量修改建表语句中的表空间名称。即:tablespace EXP_TSPACE替换为:tablespace IMP_TSPACE


<think>我们正在讨论Oracle数据库中恢复被DROP删除的表数据。根据Oracle的机制,当使用DROPTABLE命令删除表时,表并不会立即被永久删除,而是被移动到回收站(RecycleBin),除非使用了PURGE选项。因此,恢复表的第一步是检查回收站。如果表还在回收站中,可以轻松恢复。如果回收站中找不到,可能需要使用备份进行恢复,或者使用闪回数据库等高级特性,但这些通常需要提前配置。以下是恢复的步骤:1.**检查回收站**:使用`SHOWRECYCLEBIN`或查询`DBA_RECYCLEBIN`(需要权限)查看回收站中的对象。回收站中的对象名称会被重命名,但可以通过原始表名识别。2.**闪回删除(FlashbackDrop)**:如果表在回收站中,使用`FLASHBACKTABLE...TOBEFOREDROP`命令恢复。可以指定恢复后的表名,或者使用回收站中的名称恢复。3.**如果回收站中找不到**:-如果有备份,可以使用备份进行恢复(如使用RMAN或数据泵导出导入)。-如果没有备份,但启用了闪回数据库(FlashbackDatabase)功能,且删除操作在闪回窗口内,可以使用闪回数据库将整个数据库回退到删除之前的状态。注意:这会影响整个数据库。-如果以上都没有,可能需要使用数据恢复工具(如OracleDataRecovery),但这通常需要额外的成本,且不一定能完全恢复。重要注意事项:-回收站功能要求Oracle版本10g及以上,并且回收站功能默认是开启的(除了在某些特殊表空间如SYSTEM表空间不会启用)。-如果删除表时使用了`PURGE`选项,则不会进入回收站,直接删除。-表空间需要有足够的空间,因为回收站中的对象仍然占用空间。示例恢复命令:```sql--查看回收站中的对象(需要有相应权限)SHOWRECYCLEBIN;--或者SELECTobject_name,original_name,type,droptimeFROMrecyclebinWHEREoriginal_name='YOUR_TABLE_NAME';--恢复表到原来的名称FLASHBACKTABLEyour_table_nameTOBEFOREDROP;--如果回收站中有多个同名的表(比如不同时间删除的),可以指定回收站中的名字来恢复FLASHBACKTABLE"BIN$...$0"TOBEFOREDROP;```如果表被删除后,又新建了同名的表,则需要使用重命名的方式恢复,避免冲突。§§相关问题§§1.如何设置Oracle回收站功能?2.如何彻底删除表而不进入回收站?3.当回收站中的表被覆盖了怎么办?4.没有备份也没有启用闪回数据库如何恢复被DROP删除的表?</think> 在Oracle数据库中恢复被`DROP`删除的表数据有以下方法,具体取决于数据库配置和操作时间: --- ### 一、通过回收站恢复(10g及以上版本) Oracle默认启用回收站功能(除非手动禁用),删除的表会被移到回收站(Recycle Bin): 1. **查看回收站**: ```sql SHOW RECYCLEBIN; -- 或 SELECT object_name, original_name, droptime FROM user_recyclebin; ``` 2. **恢复表**: ```sql FLASHBACK TABLE 原表名 TO BEFORE DROP; -- 若存在同名冲突: FLASHBACK TABLE "BIN$...$0" TO BEFORE DROP RENAME TO 新表名; ``` > **说明**:对象名可在`SHOW RECYCLEBIN`结果中查找,格式如`BIN$JyYR3ZwgSgqMvA4gQAMBiw==$0` --- ### 二、通过闪回查询恢复(需UNDO保留) 若已清空回收站或跳过回收站(`DROP TABLE ... PURGE`): 1. **定位删除时间**: ```sql SELECT * FROM v$sql WHERE sql_text LIKE '%DROP TABLE 表名%'; ``` 记录`FIRST_LOAD_TIME`时间戳 2. **闪回查询恢复数据**: ```sql -- 在删除时间前创建新表 CREATE TABLE 恢复表 AS SELECT * FROM 原表名 AS OF TIMESTAMP TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'); ``` > **要求**: > - UNDO保留时间需覆盖删除时间 > - 需`SELECT ANY TRANSACTION`权限 --- ### 三、通过备份恢复(终极方案) 若上述方法无效(如数据已覆盖): 1. **使用RMAN备份恢复**: ```sql RUN { SET UNTIL TIME "TO_DATE('2023-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS')"; RESTORE TABLE 用户名.表名; RECOVER TABLE 用户名.表名; } ``` > **要求**: > - 需完整备份 + 归档日志 > - 恢复会覆盖当前数据库状态 2. **逻辑备份恢复**(如expdp): ```bash impdp system/password DIRECTORY=dpump_dir DUMPFILE=backup.dmp TABLES=被删表名 TABLE_EXISTS_ACTION=replace ``` --- ### 📌 关键注意事项 1. **操作时效性**: - 回收站数据会随表空间空间不足自动清理 - UNDO数据默认保留900秒(由`UNDO_RETENTION`控制) 2. **系统级保护**: - 立即停用相关表空间的自动清理: ```sql ALTER TABLESPACE users RETENTION GUARANTEE; ``` - 禁止绕过回收站: ```sql REVOKE DROP ANY TABLE FROM 高风险用户; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值