`

Oracle BLOB 字段导入导出问题

阅读更多
一、案例
假如有t1和t2在表空间tbs1上,其中t1有blob字段,现在在另外的一台机子上建了实例,表空间名为tbs2,使用imp倒入的时候,t2正常倒入,t1不能倒入,出现错误
"IMP-00017: 由于 ORACLE 错误 959, 以下语句失败:
"CREATE TABLE "t1"...............
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: tablespace 'tbs1' does not exist"

我是这样解决的
imp tables = t1 indexfile = temp.sql

- 编辑 temp.sql 只保留所需的建表命令并指定表空间为tbs2

- 以表的所有者执行temp.sql

- imp tables = t1 ignore = Y


二、java示例
blob是单独分块的,java中获取oracle blob字段值,为了防止乱码应该使用getBlob()这个oracle特有的方法

ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (queryResult.next()) {
    tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong("TEC_ATTACHID"));
    tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString("TEC_ATTACHPOSTFIX"));
    java.sql.Blob blob = queryResult.getBlob("TEC_ATTACHCONTENT");
    InputStream is = blob.getBinaryStream();
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    // 从输入流读到字节数组
    while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
        // 从字节数组到输出流
        baos.write(buffer, 0, bytesRead);
    }
    byte[] bufferFile = baos.toByteArray();
    tfzn018KtfjxxPO.setTec_attachcontent(bufferFile);
    connection.commit();
}


三、定义
BLOB、CLOB、和 NCLOB:它们在数据库中要么存储在表中,要么存储在单独的段或表空间中。
       BLOB 能够存储大容量的二进制数据,典型例子有图形图像和照片。
       CLOB 能够存储大容量的字符数据,而且对于存储非结构化的 XML 文档很有用。
       NCLOB:由对应于为 Oracle 数据库定义的本地字符集的字符数据组成。
BFILE:它们作为操作系统文件存储。
       BFILE 是一种 LOB 类型,它的值由二进制(“原始”)数据组成,而且存储在数据库表空间之外的服务器端操作系统文件中。

用oracle 9i 创建表空间,如果有这句:SEGMENT SPACE MANAGEMENT AUTO,自动段管理表空间,这样的话是不能创建clob和 blob字段的。看解释说是oracle9i的特性,把SEGMENT SPACE MANAGEMENT AUTO 去掉就可以创建clob、blob字段了。


四、sql操作
Oracle表移动表空间:
alter table tb_name move tablespace tbs_name;
使用上面语句对表做空间迁移时,只能移动非lob字段以外的数据,如果要同时移动lob字段数据,必需改用下面的语句才行:
alter table tb_name move tablespace tbs_name lob (col_lob1,col_lob2) store as(tablesapce tbs_name);

建立表空间,赋予表空间权限。
create tablespace tablespace_lob datafile 'd:/xxx/lob.dbf' size 100M autoextend on;//所有表的lob字段都用一个专用的lob表空间,导出导入数据时方便。
alter user bbb quota unlimited on tablespace_lob;//给bbb添加表空间权限。

使用exp和imp导出导入数据时,若含有blob字段,则imp过程中可能由于blob字段表空间不存在而报错。这时可以先检查源库中blob字段所在表空间名称,然后在目标库中建立同名表空间。数据导入完成后,可以使用上面语句移动blob数据到指定的表空间。


五、Q&A
1.
Q.含有blob字段的表删除记录后所在表空间不回收问题

9.2.0.8
有一张表,存储大量的图片记录,blob字段在建表时都指定norow参数,存储到单独的表空间上.

目前保存图片的表空间已满,删除若干记录,大概20%的记录,但仍然无法插入新记录,表空间的可用空间没有增加.

就用delete from table where id=xxxx语句进行删除,删除后新的图片仍然无法写入.

A.使用delete是不会回收高水位的。
alter table TABLE_NAME move;  这样空间就回收了。最好在没有业务的时间做
另外对于lob字段,alter table move也是不能降低hwm的
需要move 相应的lob段。

move完表后,这个表上测index会失效。
所以要在move后,执行alter index index_name rebuild;

Q.delete操作应该是在表空间上回收数据块的啊.将部分的数据块置为可用,这里还谈不到高水位的问题.
delete不能改变高水位这个我明白,不明白的是delete操作难道没有改变表空间的数据块的可用标记吗?我的表空间是LMT方式.

A.delete后,在oracle上看这个表的使用空间是不会改变的。但delete出来的那些空间是可以被后来的insert进来的数据行使用的


附:
select * from dba_tablespaces; //dba权限用户查看表空间参数
分享到:
评论

相关推荐

    批量导出ORACLE数据库BLOB字段生成图片

    批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将数据库中的图片资源导出到本地文件系统的情况。下面将详细介绍这一过程及其相关知识点。 首先,我们需要理解BLOB类型。BLOB...

    ORACLE中BLOB字段导入到SQL SERVER中的IMAGE字段

    1. **数据准备**:确保ORACLE数据库中的BLOB字段包含所需的数据,并且是完整的。可能需要进行数据验证,以确保所有数据都能被正确读取。 2. **数据导出**:使用ORACLE提供的工具,如SQL*Plus或者PL/SQL Developer,...

    批量导出ORACLE数据库BLOB字段生成文件

    本教程将详细讲解如何批量导出Oracle数据库中的BLOB字段并生成文件,适用于需要定期或一次性处理大量图片或其他BLOB数据的场景。 首先,确保你已经在本地安装了Oracle客户端。Oracle客户端提供了SQL*Plus和其他工具...

    oracle中的BLOB(照片)转换到mysql中

    1. **查询BLOB数据**:使用SQL查询语句从Oracle数据库中选择含有BLOB字段的照片记录。例如: ```sql SELECT photo_blob FROM photos WHERE id = ; ``` 这里`photo_blob`是BLOB类型的列,`<photo_id>`是你想获取...

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    【Oracle BLOB】存储的图片批量导出到文件夹

    使用PL/SQL脚本将Oracle的Blob字段中存储的图片批量导出到文件夹,可在文件夹中直接查看。

    Oracle导出Clob,Blob工具版本2

    Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。"Oracle导出Clob,Blob工具版本2" 是一个专为解决这个问题而设计的应用程序,它改进了对CLOB...

    kettle通过java代码将数据库blob 字段抽取到本地文件

    kettle通过java代码将数据库blob 字段抽取到本地文件

    记录一次EXPDP导出BLOB字段 遇到ORA-01555报错

    oracle expdp导出blob字段遇到ora-01555报错的解决方案

    Oracle照片导出

    Blob字段类型是Oracle提供的一种存储大数据的方法,适用于存储非文本信息。在Oracle中,Blob字段可以存储高达4GB的数据。 该工具的核心功能包括: 1. **指定表名**:用户可以输入想要导出照片的表名。在Oracle...

    sql server中的image类型的数据导出到oracle的clob字段中

    SQL Server 中 Image 类型数据导出到 Oracle 的 CLOB 字段中 在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 ...

    blob类型图片批量导出工具

    这款工具设计的目的是为了帮助用户方便地从Oracle数据库中批量提取并导出Blob字段中的图片至指定的文件夹。 首先,用户需要在运行这个exe可执行文件前确保已安装了Oracle 10g客户端。Oracle 10g客户端是与Oracle...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    - **联邦能力**:利用WII的联邦功能,先将DB2中的非BLOB字段复制到Oracle目标表中。 - **标志字段**:在Oracle目标表上添加一个额外的“flag”字段,初始值设为“1”。此字段用于识别哪些记录需要更新BLOB数据。 ...

    通过PLSQL的进行oracle数据库导入导出

    4. **BLOB导入**:在目标数据库中,读取文件内容并使用`DBMS_LOB.loadfromfile`将数据插入到相应的BLOB字段。 通过这些方法,即使面对复杂的CLOB和BLOB数据,也能在PL/SQL Developer中实现有效的导入导出。 ### ...

    ORACLE数据导入导出-操作手册.docx

    ### Oracle 数据库数据导入导出操作手册解析 #### 手册概述 该操作手册由中科软科技股份有限公司于2019年5月发布,旨在指导数据处理人员如何正确地使用Oracle数据库进行数据导入与导出操作。手册不仅包含了具体的...

    批量导出blob工具

    3. **自定义导出数据**: 这个功能允许用户选择要导出的特定Blob字段,或者按照特定条件筛选数据。这可能是通过在命令行参数中指定,或者在工具的GUI界面中配置。用户可以指定表名、列名以及可能的查询条件,例如只...

    ORACLE批量导入图片到BLOB字段代码示例

    要插入图片的表不是固定的,而且是批量插入很多张,还要考虑到因为图片的文件名错误,修改后要再次插入,此时应避免已经插入的重复执行操作, 浪费时间。 所以就选择先用一张临时表来暂时保存从文件系统读取的照片...

    Oracle bolb 文件导出

    在处理大量这样的数据时,高效地导出BLOB字段到本地文件系统变得至关重要。本篇文章将深入探讨如何使用多线程技术来优化Oracle BLOB文件的导出过程,特别是针对Word文档的处理。 1. **Oracle BLOB类型** Oracle ...

    照片批量导入导出

    Oracle提供Data Pump(expdp/impdp)工具,可以高效地导出和导入大量数据,包括BLOB字段。 5. **图像处理**:在导出过程中,可能需要对照片进行格式转换(如JPEG、PNG)、尺寸调整、质量压缩等处理,这通常需要利用...

    load blob clob

    在处理Blob数据时,我们通常需要将外部文件加载到Blob字段或者从Blob字段导出到文件。例如,ociuldr2.c可能是Oracle的OCI(Oracle Call Interface)驱动的源代码文件,用于开发与数据库交互的应用程序,其中可能包含...

Global site tag (gtag.js) - Google Analytics