`
waking
  • 浏览: 7200 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

从Oracle导出BLOB(方案1:客户端)

 
阅读更多

1. 需求

在服务器2(数据库客户端)上运行一个数据库脚本来操纵在服务器1(数据库服务器)的数据库中的一个BLOB字段,导出这个字段到服务器2的一个文件中。
2. 解决方案

2.1 方案展示图

2.2 步骤

2.2.1 服务器1上

  1. 在服务器1上建立一个含有blob字段的表。

    blob_export(
    id number,
    photo blob)


  2. 向该表插入一些blob数据.

  3. 建立一个服务器1的操作系统目录,比如 '/tmp/tmp/photo_export'

  4. 利用sshfs把刚建立的目录Mount成服务器2的一个远程目录,比如用如下命令行:

    sshfs  user@server1:/tmp/photo_export /tmp/tmp/photo_export

    注: 在Redhat, 需要用: sudo yum install sshfs

  5. 在服务器1建立一个数据库的directory,关联到刚创建的本地操作系统目录。比如'LOCAL_PHOTO_EXPORT_2' 到 '/tmp/tmp/photo_export'

    CREATE OR REPLACE DIRECTORY LOCAL_PHOTO_EXPORT_2 AS '/tmp/tmp/photo_export';
    GRANT all ON DIRECTORY LOCAL_PHOTO_EXPORT_2 TO user;

  6. 创建一个存储过程来实现blob导出,代码如下:

    create or replace PACKAGE BODY FILE_TRANSFER AS  
      PROCEDURE REMOTE_BLOB_EXPORT(P_LOCAL_DIRECTORY in varchar2) AS
        l_id number;
        l_photo_len number;
        l_photo blob;
     
        l_file      UTL_FILE.FILE_TYPE;
        l_buffer    RAW(32767);
        l_amount    BINARY_INTEGER := 32767;
        l_pos       NUMBER := 1;
     
        c_photo_ext varchar2(5);
        l_file_name varchar2(30);
        BEGIN
          c_photo_ext :='.png';
     
     
          for rec in
            (
            
            select * from blob_export
            )
          loop
              l_id:=rec.id;
              l_photo:=rec.photo;
              l_photo_len := DBMS_LOB.getlength(l_photo);
     
              l_file_name := to_char(l_id)||c_photo_ext;
     
              --open file
              l_file := UTL_FILE.fopen(P_LOCAL_DIRECTORY,l_file_name,'wb',32767);
     
              --write file
              WHILE l_pos < l_photo_len LOOP
                DBMS_LOB.read(l_photo, l_amount, l_pos, l_buffer);
                UTL_FILE.put_raw(l_file, l_buffer, TRUE);
                l_pos := l_pos + l_amount;
              END LOOP;
     
              -- Close the file.
              UTL_FILE.fclose(l_file);
          end loop;
        END REMOTE_BLOB_EXPORT;
     
     
    END FILE_TRANSFER;


2.2.2 在服务器2

  1. 在上一节第4步(mount)前,我们需要创建一个操作系统目录,比如'/tmp/photo_export'
  2. 用如下命令登陆sqlplus.请替换相应部分,比如用户名,密码,服务器地址等。

    sqlplus "user/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=server2.xxx.com)(Port=1521))(CONNECT_DATA=(SID=service1)))"
    


  3. 在sqlplus执行blob导出的存储过程。

    execute   file_transfer.remote_blob_export('LOCAL_PHOTO_EXPORT_2');


扩展

判断文件是否存在

<span style="font-size:14px;">function is_file_exist(p_local_directory in varchar2, p_file_name in varchar2)
    return char
    as
    l_exists boolean;
    l_file_len number;
    l_block number;
    begin
      UTL_FILE.FGETATTR(p_local_directory, p_file_name,l_exists,l_file_len,l_block);
      if l_exists=true then
        return 'Y';
      else
        return 'N';
      end if;
    end is_file_exist;</span>

select file_transfer.is_file_exist('LOCAL_PHOTO_EXPORT_2','a.png') from dual;


删除文件
<span style="font-size:14px;">procedure remove_file(p_local_directory in varchar2, p_file_name in varchar2)
   as
   begin
     if is_file_exist(p_local_directory, p_file_name)='Y' then
      utl_file.fremove(p_local_directory,p_file_name);   
     end if;
   end remove_file;</span>

execute   file_transfer.remove_file('LOCAL_PHOTO_EXPORT_2','a.png');

参考

  1. How To Use SSHFS to Mount Remote File Systems Over SSHhttps://www.digitalocean.com/community/tutorials/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh
  2. Extract files from an Oracle BLOB fieldhttp://stackoverflow.com/questions/6332032/how-can-i-extract-files-from-an-oracle-blob-field
  3. UTL_FILEhttps://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm





分享到:
评论

相关推荐

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

    1. **安装Oracle Client**:Oracle Client是与Oracle服务器通信的客户端工具,它提供了与数据库交互所需的所有库和驱动程序。安装完成后,我们可以使用SQL*Plus、PL/SQL Developer等工具来连接数据库。 2. **配置...

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

    批量导出BLOB字段的过程通常涉及编写SQL查询或使用PL/SQL过程。这里,我们关注的是通过命令行工具实现自动化。你可以创建一个简单的脚本,输入数据表的名称,以及存储图片文件名和BLOB数据的列名。例如,假设你有一...

    blob类型图片批量导出工具

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

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

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

    oracle10g数据导入到oracle9i解决方案

    1. **使用9.2.0.5版本以上的客户端**:为了规避旧版Oracle 9i客户端在处理BLOB/CLOB字段时可能出现的问题,建议使用9.2.0.5版本以上的客户端进行数据导出。 2. **处理BLOB/CLOB字段**:对于9.2.0.5之前版本的Oracle ...

    oracle app32

    oracle32位客户端,用于导出oracle中的blob和clob,解决plsql不能导出blob和clob的问题 D:\Programs\app32\exp.exe name/"""password"""@121.32.118.130:1521/dev file=act1.dmp tables=(ACT_GE_BYTEARRAY)

    OracleClient.zip

    OracleClient.zip是一个包含Oracle数据库客户端软件的压缩包。OracleClient是Oracle公司提供的用于与Oracle数据库交互的工具集,它使得开发者和系统管理员能够在不安装完整Oracle数据库服务器的情况下,连接到远程...

    odac oracle 连接控件

    这个组件提供了全面的解决方案,使.NET开发者能够方便、高效地与Oracle数据库进行交互,而无需在目标机器上安装完整的Oracle客户端软件。这极大地简化了部署过程,降低了对系统资源的需求。 ODAC支持多种Oracle...

    ORACLE驱动程序JAR包下载 解决编辑器内WORD特殊格式粘贴问题

    Oracle JDBC驱动主要有四种类型: Thin、OCI、JDBC-ODBC桥和Universal Driver,其中Thin驱动是纯Java实现,不需要Oracle客户端,适合网络环境,而其他驱动可能需要本地Oracle客户端支持。 当涉及到编辑器内Word特殊...

    oracle数据库知识.pptx

    总结来说,Oracle数据库是一个强大且全面的数据库解决方案,涵盖了从基础数据存储到高级数据库管理的所有方面,广泛应用于企业级信息系统,为企业提供了稳定、高效的数据服务。掌握Oracle数据库的知识对于IT专业人员...

    《Oracle 10数据库系统教程与上机指导》习题答案.doc

    2. **导出的选项**:导出表、导出方案、导出表空间、导出数据库。 3. **导出命令**:使用目录变量与EXPDP命令。 4. **导入命令**:使用EXPDP与IMPDP命令。 #### 选择题知识点 - **导入导出命令的使用**:例如,如何...

    超详细ORACLE培训带实例带书签目录

    本培训材料旨在全面介绍Oracle数据库的相关知识,从基础知识到高级应用均有涉及。通过一系列章节的学习,读者不仅可以掌握Oracle的基本操作,还能深入了解其架构和高级功能,从而更好地利用Oracle解决实际问题。 ##...

    oracle 基础知识整理

    Oracle支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、二进制类型(RAW、BLOB)以及复合和对象类型。选择合适的数据类型能有效节省存储空间,提高查询...

    oracle教程

    - **Oracle数据类型**:Oracle支持多种数据类型,如NUMBER、VARCHAR2、DATE、BLOB等,以及特有的对象数据类型。 - **创建表和约束**:使用CREATE TABLE语句定义表结构,可以添加各种约束,如NOT NULL、UNIQUE、...

    ORACLE速成手册 面向应用

    1. **下载与解压**:首先从Oracle官网下载Oracle数据库安装包,并将其解压缩到指定文件夹。 2. **启动安装程序**:运行解压后的`setup.exe`文件来启动安装程序。 3. **配置安装路径**:选择或接受默认的安装路径作为...

    Oracle数据库操作.pdf

    1. 安装Oracle客户端,并配置好数据库连接信息。 2. 导出数据库的几种方式: - 导出整个库:`exp 用户名/密码@数据库服务名 file=文件路径.log=log=日志路径.log` - 不包含数据导出:`... rows=n` - 导出单个表:...

    SQLProgress for Windows(Oracle Only)

    将数据库的BLOB栏位直接导出,或者将外部文件直接导入到BLOB栏位中。 可以根据文件内容修改数据库数据,或者把数据库中的数据作为新的栏位添加到文件中而形成新的文件 将SQL的执行结果导出为Excel格式,TEXT格式,...

Global site tag (gtag.js) - Google Analytics