Oracle在没有dba权限和表空间对不上和不能用数据泵的情况下迁移

目录

任务背景

我们需要做Oracle备份迁移,但是面临以下不可抗力:

①我们只有普通用户的客户端权限

②我们连不了Oracle所在的服务器,所以用不了expdp数据泵,只能用原始的exp

③没有dba权限,也没办法建表空间,只有别人给建好的一个表空间,这里命名为TABLESPACE_A,这与我们迁出数据库的表空间不同,这会导致还原报错。

流程图

第一步:导出数据

由于我们没有dba权限,表空间是导不出来的,表空间只能导出某个表关联了什么表空间这种信息

执行命令例如:

复制代码
exp 用户名/密码@服务器IP:端口/服务实例名 file=E:\xxx.dmp LOG=E:\xxx.log full=y;

第二步:获取创建表结构的DDL语句

下面这个虽然是imp命令,但是它不会真正执行导入,只会输出一个sql脚本文件,我们的目的是修改这个文件中的旧表空间名称,以消除表空间带来的报错。

复制代码
imp 用户名/密码@服务器IP:端口/服务实例名 file=E:\xxx.dmp indexfile=E:\BAK_DDL.sql full=y;

第三步:修改上一步导出的BAK_DDL.sql

将里面创建索引的、ID自增的全删掉,只保留CREATE TABLE(...的完整语句既可。

然后将CREATE TABLE语句中涉及表空间名称的,全局替换成新的表空间名称。

第四步:执行上一步的脚本

在新的空数据库里执行修改后的BAK_DDL.sql,并观察表总数,是否有创建失败的。

第五步:执行导入

这样导入就不会出现表空间不存在的报错了

复制代码
imp 用户名/密码@服务器IP:端口/服务实例名 file=E:\xxx.dmp ignore=y;

数据检查

最终一定要进行详细完整的数据检查,不能把本文当做100%没问题的方案,如遇问题欢迎在评论区沟通讨论

贴一些常用的查询语句

查看用户下表空间所占的存储空间情况

复制代码
SELECT 
    tablespace_name,
    segment_type,
    COUNT(*) as 对象数,
    ROUND(SUM(bytes)/1024/1024, 2) as 占用大小_MB,
    ROUND(MAX(bytes)/1024/1024, 2) as 最大对象_MB
FROM user_segments
WHERE tablespace_name IS NOT NULL
GROUP BY tablespace_name, segment_type
ORDER BY tablespace_name, segment_type;

查看用户的默认表空间

复制代码
SELECT 
    username,
    default_tablespace as 默认表空间,
    temporary_tablespace as 临时表空间
FROM user_users;

查看用户中实际正在使用的表空间

复制代码
SELECT DISTINCT tablespace_name, COUNT(*) as 对象数量
FROM (
    -- 你创建的表在哪些表空间
    SELECT table_name, tablespace_name FROM user_tables WHERE tablespace_name IS NOT NULL
    UNION ALL
    -- 你创建的索引在哪些表空间
    SELECT index_name, tablespace_name FROM user_indexes WHERE tablespace_name IS NOT NULL
    UNION ALL
    -- 你创建的其他段(分区、LOB等)
    SELECT segment_name, tablespace_name FROM user_segments WHERE segment_type NOT IN ('TABLE','INDEX')
)
GROUP BY tablespace_name
ORDER BY tablespace_name;

查看不在默认表空间下的表

复制代码
SELECT table_name, tablespace_name
FROM user_tables
WHERE tablespace_name IS NOT NULL AND tablespace_name != (SELECT default_tablespace FROM user_users);
相关推荐
2301_8039346116 小时前
SQL如何进行分组后字符串拼接_使用GROUP_CONCAT或STRING_AGG
jvm·数据库·python
爱喝水的鱼丶16 小时前
SAP-ABAP:数据类型与数据对象(8篇) 第四篇:关系映射篇——从类型定义到对象实例的转化逻辑
开发语言·数据库·学习·sap·abap
csdn小瓯16 小时前
Pydantic V2 模型校验与配置管理最佳实践
运维·数据库·windows
网管NO.117 小时前
MySQL、Oracle、PostgreSQL 深度对比,数据库怎么选?
数据库·mysql·oracle
新新学长搞科研17 小时前
【安徽大学主办】第五届半导体与电子技术国际研讨会(ISSET 2026)
大数据·数据库·人工智能·自动化·信号处理·半导体·电子
SelectDB17 小时前
PB 级自动驾驶数据秒级检索:Apache Doris 统一多模态数据平台实践
大数据·数据库·数据分析
Gauss松鼠会17 小时前
【GaussDB】基于SpringBoot实现操作GaussDB(DWS)的项目实战
java·数据库·经验分享·spring boot·后端·sql·gaussdb
難釋懷17 小时前
Redis内存回收-内存淘汰策略
前端·数据库·redis
一只fish17 小时前
Oracle官方文档翻译《Database Concepts 26ai》第7章-数据完整性
数据库·oracle
Gauss松鼠会17 小时前
【GaussDB】GaussDB 常见问题及解决方案汇总
java·数据库·算法·性能优化·gaussdb·经验总结