AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 163576
Accepted
SHS
SHS
Asked: 2017-02-09 05:09:41 +0800 CST2017-02-09 05:09:41 +0800 CST 2017-02-09 05:09:41 +0800 CST

执行 expdp 命令时遇到“快照太旧”错误

  • 772

在我的生产数据库中执行 expdp 命令时遇到问题。(Windows 环境中的 Oracle 11g)

cmd> expdp 'sys/123@PROD as sysdba' DUMPFILE=BACKUP_02082017_BACKUP.dmp LOGFILE=BakupLog_02082017_BACKUP.log SCHEMAS=A1,B2,C3,D4.. exclude=统计一致=y

导出大小为 7GB 的数据库需要 1 天多的时间。但我的问题是导出有错误并显示错误消息

ORA-31693: 表数据对象 "owner"."PASSWORD_HISTORY" 加载/卸载失败并且由于错误被跳过: ORA-02354: 导出/导入数据时出错 ORA-01555: 快照太旧: 回滚段号 19名称“_SYSSMU19_255734752$”太小

当我将我的保留策略从默认的 900 设置为 16500 时。即使发生了同样的错误。

因为我计划将保留策略增加到 10 小时,即 36000。它可行吗?我很困惑我的撤消表空间是否能够做到这一点?

提供更多细节:

>  show parameter undo_%;

 NAME                                             TYPE        VALUE                                                                                                
-------------------------------------------------- ----------- -------- 
undo_management                                   string     AUTO                                                                                                 
undo_retention                                    integer    16500                                                                                                
undo_tablespace                                   string     UNDOTBS1  




>  select file_name,tablespace_name,trunc(bytes/1024/1024) mb, trunc(maxbytes/1024/1024) mm
        FROM dba_data_files
        where tablespace_name = 'UNDOTBS1';

FILE_NAME                                  TABLESPACE_NAME    MB MM
--------------------------------------------------------------------
C:\APP\ADMIN\ORADATA\PROD\UNDOTBS01.DBF   UNDOTBS1          5630 32767




>Size of undo with current undo_retention :
     Actual Undo size[MBytes]:5630
     UNDO retention[Sec]:16500 
     Needed Undo Size[MBytes]:909.433359

我被这个问题困住了。任何人请建议我如何处理这个错误?

提前致谢。

oracle oracle-11g-r2
  • 2 2 个回答
  • 31988 Views

2 个回答

  • Voted
  1. Best Answer
    atokpas
    2017-02-10T01:25:43+08:002017-02-10T01:25:43+08:00

    ORA-01555错误的原因是undo_retention与使用参数完成导出所需的时间相比,参数的值较低consistent=y(在 11g 中已弃用,应使用flashback_timeor flashback_scn)。

    您的撤消保留应该能够保留导出作业期间的撤消信息。

    例如,如果您导出开始于00:00 AM并且需要 2 小时才能完成,那么undo_retention如果您希望获得一致的数据,则应该设置至少 2 小时。

    我已经在我的测试服务器中模拟了这个问题。

    [oracle@orcl expdp_dump]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 8 09:41:40 2017
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, Automatic Storage Management, OLAP, Data Mining
    and Real Application Testing options
    
    SQL> show parameter undo
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management                      string      AUTO
    undo_retention                       integer     2400
    undo_tablespace                      string      UNDOTBS1
    

    我的撤消保留时间设置为 40 分钟。

    SQL> select bytes/1024/1024 from v$datafile where ts#=2;
    
    BYTES/1024/1024
    ---------------
              32764
    

    我的撤消表空间是 32GB 大。

    我试图导出我的一个模式。

    expdp system/password directory=DP_DIR schemas=MYSCHEMA dumpfile=expdp_orcl_MYSCHEMA.dmp logfile=expdp_orcl_MYSCHEMA.log FLASHBACK_TIME=SYSTIMESTAMP
    

    作业“SYSTEM”。“SYS_EXPORT_SCHEMA_07”在 2017 年 2 月 7 日星期二 22:14:46 已完成 0 01:14:39 时出现 1 个错误

    花了1小时14分钟。并且在数据库中有适度的 DML 操作。

    ORA-31693: Table data object "MYSCHEMA"."MS_TABLE":"MS_TABLE."MS_TABLE_B_2005" failed to load/unload and is being skipped due to error:
    ORA-02354: error in exporting/importing data
    ORA-01555: snapshot too old: rollback segment number 84 with name "_SYSSMU84_1745672109$" too small
    . . exported "MYSCHEMA"."PRORATE_EVENT"              8.789 KB       4 rows
    . . exported "MYSCHEMA"."PRORATE_RULE_GROUP"         5.945 KB       1 rows
    . . exported "MYSCHEMA"."ORACLE_JOB_METADATA"            0 KB       0 rows
    

    我得到了ORA-0155错误。

    然后我将撤消保留时间增加到 1 小时 20 分钟。

    SQL> alter system set undo_retention=4800;
    
    System altered.
    

    我再次尝试导出架构。

    expdp system/password directory=DP_DIR schemas=MYSCHEMA dumpfile=expdp_orcl_MYSCHEMA.dmp logfile=expdp_orcl_MYSCHEMA.log FLASHBACK_TIME=SYSTIMESTAMP
    

    作业“SYSTEM”。“SYS_EXPORT_SCHEMA_07”已于 2017 年 2 月 8 日星期三 22:15:52 成功完成 0 01:15:45。

    而且再也没有ORA-01555了。

    使用 BLOCKS 方法的总估计:182.9 GB

    实际文件大小为 141 GB。

    为什么转储文件的估计和实际大小有差异?看看这个帖子就知道答案了。

    关于完成导出所需的时间。尝试使用以下参数。

  2. 平行
  3. 直接=y

    此外,在开始导出作业之前尝试收集数据字典统计信息 -

    SQL> connect / as sysdba
    SQL> exec dbms_stats.gather_dictionary_stats;
    SQL> exec dbms_stats.lock_table_stats (null,'X$KCCLH'); 
    SQL> exec dbms_stats.gather_fixed_objects_stats;
    

    进一步阅读:

  4. 大型数据库上的 DataPump 导出性能不佳(文档 ID 473423.1)
  5. 数据泵导出

  • 3
  • Mike Mohlakwane
    2022-05-27T00:30:31+08:002022-05-27T00:30:31+08:00

    另一种选择是增加突出显示的回滚段的 max_extents 以及所有其他具有相同 max_extents 的部分,或者将它们脱机并离开

    • 0
  • 相关问题

    • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

    • ORDER BY 使用文本列的自定义优先级

    • 舒服的sqlplus界面?[关闭]

    • 如何在数据库中找到最新的 SQL 语句?

    • 如何使用正则表达式查询名称?

    Sidebar

    Stats

    • 问题 205573
    • 回答 270741
    • 最佳答案 135370
    • 用户 68524
    • 热门
    • 回答
    • Marko Smith

      连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

      • 12 个回答
    • Marko Smith

      如何让sqlplus的输出出现在一行中?

      • 3 个回答
    • Marko Smith

      选择具有最大日期或最晚日期的日期

      • 3 个回答
    • Marko Smith

      如何列出 PostgreSQL 中的所有模式?

      • 4 个回答
    • Marko Smith

      列出指定表的所有列

      • 5 个回答
    • Marko Smith

      如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

      • 4 个回答
    • Marko Smith

      你如何mysqldump特定的表?

      • 4 个回答
    • Marko Smith

      使用 psql 列出数据库权限

      • 10 个回答
    • Marko Smith

      如何从 PostgreSQL 中的选择查询中将值插入表中?

      • 4 个回答
    • Marko Smith

      如何使用 psql 列出所有数据库和表?

      • 7 个回答
    • Martin Hope
      Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
    • Martin Hope
      Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
    • Martin Hope
      Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
    • Martin Hope
      Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
    • Martin Hope
      haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
    • Martin Hope
      qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
    • Martin Hope
      markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
    • Martin Hope
      Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
    • Martin Hope
      Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
    • Martin Hope
      Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

    热门标签

    sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

    Explore

    • 主页
    • 问题
      • 最新
      • 热门
    • 标签
    • 帮助

    Footer

    AskOverflow.Dev

    关于我们

    • 关于我们
    • 联系我们

    Legal Stuff

    • Privacy Policy

    Language

    • Pt
    • Server
    • Unix

    © 2023 AskOverflow.DEV All Rights Reserve