`
bicashy
  • 浏览: 159608 次
社区版块
存档分类
最新评论

数据库导出备份的时候部分表不能导出

    博客分类:
  • sql
阅读更多
         今天在做数据迁移的过程中,本想把服务器上原有的oracle数据库备份到本地,但是在导出数据的同时,却发现的一个奇怪的问题,有部分的表没有被导出来。对于数据库备份,数据库导入来说早已操作过N便了,从来没有遇到过这样的情况。

           纳闷,奇怪的同时,决定探寻究竟,为什么这部分表不能够正常的被导出。于是将注意力放到系统视图 user_tables 上,查询后比较了那些可以导出的和不能导出的表的差异,发现那些不能导出的表的字段next_extent都为空的。

           google搜索了一下才恍然大悟,原来服务器上面装的oracle版本是11g的(之前测试服务器装的是10g,所以导出导入数据都没有问题),问题就在于版本是11g的,因为11G中有个新特性,当表无数据时,不分配segment,以节省空间,所以导不出如果重来没有使用过的空表默认情况下是导不出来的。如果想导出已经存在的表必须对空表进行数据的插入然后rollback。如果以后新建的空表也要自动导出,必须修改一个参数 deferred_segment_creation    
    
          查。发现原来这个11g的一个特性:deferred_segment_creation,即建立表的时候,一开始并没有直接分配存储空间。直接在字典中记录了数据结构。而只有当真正有数据的时候才分配空间。这种方法对于象SAP这样大的系统需要部署成千上万张表是非常有效的。默认是开启的,需要关闭alter system set deferred_segment_creation=false;

          但是最后我采取的方式,没有用改变系统设置的这种方法(据说上述设置后,只对以后增加的表有效,我也没有测试),采用了另一种可行的方法,那就是move操作。alter table move命令可以释放空间(当然这语句最根本的作用还是移动表到不同的表空间去,这里只是借用它可以释放空间的一个特性),还要了解该动作会锁表直到命令结束,而且会导致索引失效, ...

         大家可能知道deltete不会释放表空间,但是可以重用,也就是插入可以填补空洞,当然现实应用中确实是存在经常删除很少插入的情况,这样就存在了释放表空间优化数据库的可行性了,truncate有不能带条件的缺陷,自然就想到用alter table move重移表空间的方法。这里要注意三个要素
1、  alter table move 省略了tablespace XXX, 表示用户移到自己默认的表空间,因此当前表空间至少要是该表两倍大,这很好理解,由于易错所以提出,就不再细说了。
2、  alter table move过程中会导致索引失效,必须要考虑重新索引
3、  alter table move过程中会产生锁,应该避免在业务高峰期操作!


           回到之前的话题,目的将11g所有的表备份下来(包括空数据表),可以通过查询
--将所有不能正常导出的表查询出来
select t.* from user_tables t where t.next_extent is null;
--构造move语句,然后批量执行
select 'alter table '||t.table_name||' move;' from user_tables t where t.next_extent is null;



          这样再次进行exp导出操作,就会发现所有的表都会导出来了。。。

分享到:
评论

相关推荐

    PHP实现数据库备份导出成sql

    PHP实现数据库备份导出成sql 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例使用PHP 7中的PDO数据对象对MySQL数据库进行查询操作...

    数据库导出库和表属性源码

    数据库导出库和表属性是数据库管理中的一个重要环节,它涉及到数据的备份、迁移和分析。源码实现这一功能能够帮助管理员更高效地处理数据库信息。以下是对标题和描述中涉及知识点的详细解释: 1. **数据库系统**:...

    DbSchema数据库导出

    在Oracle中,数据库导出通常涉及使用`expdp`和`impdp`命令,这些实用程序允许管理员导出和导入数据泵(Data Pump)格式的文件,以实现数据的迁移和备份。 Mysql是另一种广泛使用的开源数据库系统,它的导出功能可以...

    h2数据库批量导出

    四、数据库导出 1. 导出脚本:H2提供了SCRIPT命令来导出数据库的创建脚本和数据,如`SCRIPT TO 'mydb.sql';`。 2. 导出数据:使用`RUNSCRIPT FROM 'mydb_data.sql'`命令可以导入数据,同理,可以使用`SCRIPT TO '...

    sql server 数据库导入导出方法

    数据库导出是将数据库备份到本地或网络存储设备中的过程,目的是为了备份数据库以防止数据丢失或损坏。以下是 SQL Server 数据库导出的步骤: 1. 选中要备份的数据库,右键点击选择“任务”,然后选择“备份”。 2....

    oracle数据库导入导出备份与恢复

    总的来说,Oracle数据库的导入导出备份与恢复是数据库管理的基础操作,熟练掌握这些技巧能够有效地保护数据,提高数据安全性和业务连续性。正确使用Export和Import工具,结合合理的备份策略,可以为数据库提供全面的...

    oracle数据库自动备份系统

    四、可以自定义备份策略,备份时间、路径、方式都可以自己选择(比如周一导出备份、周二冷备份等) 五、备份后的数据可以按照设定定期删除(可选择保留n天的数据及选择保留固定几日的数据如保留每月10、20、30号的数据)...

    SQL数据表提取器,分离数据库、备份数据库、还原数据库、导出表结构、导出数据

    本模块主要实现了附加数据库、分离数据库、备份数据库、还原数据库、导出表结构、导出数据等功能。在对数据库进行操作前,首先需要选择服务器,及输入相应的用户名和密码,进行登录,然后才能对数据库进行操作。

    oracle数据库导出表结构到WORD文档

    "oracle数据库导出表结构到WORD文档"是一个实用的操作,它能够帮助我们生成包含所有表定义、字段信息、主键、外键等的详细报告。通过这个工具,我们可以快速地将Oracle中的数据库对象信息整理成Word文档,方便打印、...

    MYSQL 数据库导入导出命令

    MySQL 数据库导入导出命令是数据库管理员和开发者经常使用的命令,用于将 MySQL 数据库导出到文件中,以便备份、还原或迁移到其他服务器。下面将详细介绍 MySQL 数据库导入导出的命令和方法。 数据库备份 数据库...

    PostgreSQL 数据库导出备份脚本-Linux版本

    1、文件里面是自用的,在Linux操作系统上运行的 PostgreSQL 数据库导出备份脚本。 2、支持docker版本、多数据库导出、保留天数等。 3、有详细的使用说明以及命令注释。 适合人群: 具备一定Linux操作基础的人员。

    PowerDesigner从数据库中导出表结构

    ### PowerDesigner从数据库中导出表结构 #### 一、PowerDesigner简介 PowerDesigner是一款功能强大的CASE工具,广泛应用于数据库设计、数据建模等领域。它能够帮助开发人员和数据库管理员快速构建高质量的数据模型...

    从数据库中导出表生成dbf文件命令

    从给定的信息来看,主要涉及的是使用SQL Server的批处理工具BCP(Bulk Copy Program)来从数据库中导出表并生成dbf文件的过程。下面将详细介绍这一过程及相关知识点。 ### BCP工具简介 BCP是SQL Server提供的一款...

    Oracle数据库导入导出(备份与恢复).docx

    Oracle数据库导入导出命令(备份与恢复) Oracle数据库是目前最流行的RELATIONAL DATABASE MANAGEMENT SYSTEM(关系数据库管理系统),它提供了强大且灵活的数据存储和管理功能。为了确保数据的安全和可靠性,Oracle...

    Oracle数据库表结构导出工具

    在日常管理和开发过程中,有时我们需要将Oracle数据库的表结构导出为其他格式,便于分析、备份或共享。"Oracle数据库表结构导出工具"就是为此目的设计的实用程序,它能够方便地将表结构转换成易于查看和处理的Excel...

    DB2导出数据库表结构和数据.pdf

    DB2 导出数据库表结构和数据 DB2 是一个关系数据库管理系统,能够高效地存储、管理和检索大量数据。在实际应用中,我们经常需要导出数据库表结构和数据,今天我们将讨论如何使用 DB2 导出数据库表结构和数据。 ...

    informix数据库常用备份方法 - 总结

    `dbexport` 是 Informix 提供的一种用于导出数据库的工具,它允许用户备份单个数据库。使用 dbexport,你可以将数据库结构和数据保存为文本文件,便于存储和恢复。然而,执行 dbexport 时需要确保所有与数据库操作...

    oracle备份数据库导入导出

    总之,Oracle数据库的备份和导入导出是数据库管理员日常工作中不可或缺的部分,掌握这些技能对于确保数据安全和业务连续性至关重要。正确使用`expdp`和`impdp`工具,结合适当的备份策略,能够有效应对各种数据恢复...

    sql+oracle 数据库脚本备份及重要表数据批量导出

    1、备份sql数据库,所有对象脚本。 2、能够批量导出sql库中需要的一些小表数据。 4、自动解析oracle连接配置,支持不安装sqlplus备份oracle中某个用户的所有对象脚本,方便备份。 5.能够批量导出oracle用户下的重要...

    从pgsql 数据库导出数据字典

    在IT行业中,数据库是存储和管理数据的核心工具,而数据字典则是数据库中不可或缺的一部分。在PostgreSQL(pgsql)这样的关系型数据库管理系统中,数据字典通常是指一系列元数据,这些元数据描述了数据库的结构、...

Global site tag (gtag.js) - Google Analytics