Oracle 11G使用expdp如何单独导出备份数据库
expdp实现单库独立备份的操作方案
核心问题根因
导出时连带导出所有库的情况,由三类操作误区导致:
- expdp无法自动识别SQL Developer内配置的连接信息,所有连接定位、导出范围完全由执行命令时的参数、网络连接目标决定
- 存在连接目标错配:三次导出操作实际都连接到了同一个公共Oracle实例,未分别对接三个独立库对应的实例
- 参数配置缺失:使用高权限账号执行导出时未添加范围过滤,导致expdp按账号权限范围导出了所有可见对象
独立备份落地步骤
- 第一步:锁定每个独立库的连接定位信息
打开SQL Developer内三个数据库的连接属性,分别记录每个连接对应的主机IP、监听端口、服务名/SID,这三个参数是expdp定位目标独立库的唯一依据,不能依赖本地默认Oracle环境变量或tns配置。 - 第二步:配置精准的expdp执行命令,杜绝全量导出
执行expdp时不能仅填写简单的用户密码和文件路径,必须显式绑定目标库、限定导出范围:- 连接串部分直接写入目标库的完整定位,不依赖本地tns解析,格式参考:
expdp 目标库专属账号/对应密码@//目标主机IP:端口/目标库服务名 - 显式关闭全库导出开关:添加
FULL=N参数,避免高权限账号触发默认全库导出逻辑 - 限定导出范围:如果当前目标独立库对应专属业务schema,添加
SCHEMAS=目标库专属schema名参数,强制expdp仅导出该schema下的所有对象 - 配置导出目录:通过
DIRECTORY=预先在目标库创建的专属目录对象参数,指定导出文件在目标库服务器上的存放路径
- 连接串部分直接写入目标库的完整定位,不依赖本地tns解析,格式参考:
- 第三步:提前校验导出范围,避免导错
第一次执行对应库的导出任务前,添加测试参数跑小体量任务验证:在命令中加入INCLUDE=TABLE: "='你已知的当前目标库内的一张测试表名'",执行完成后核查导出日志:- 日志开头打印的连接实例名是否与目标独立库的实例名一致
- 日志中列出的导出对象是否全部属于当前目标库
校验通过后移除测试参数,即可执行全量备份。
常见误操作避坑清单
禁止在本地服务器上不写连接串直接跑expdp,这类操作会默认连接本地
ORACLE_SID环境变量指向的实例,无法连通远端独立库
禁止使用共享高权限DBA账号不加过滤直接跑导出,这类账号拥有跨schema的对象访问权限,不加参数时会导出所有有权限访问的对象,无法实现单库备份目标
禁止混淆“独立数据库”和“同实例下的独立schema”的概念:如果三个SQL Developer连接实际对应同一个物理实例下的三个schema,必须通过SCHEMAS参数做范围过滤,才能实现单schema的独立导出
内容的提问来源于stack exchange,提问作者Gerelmaa Sergelen
相关产品推荐
相关产品推荐

