IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

将远程共享文件夹挂载到linux本地目录

信春哥,系统稳,闭眼上线不回滚 2012-05-15 23:42:34 累计浏览 4,579 次
本机暂存

今天客户提个新需求,负责扫描的公司提交的数据是存放在Windows虚拟机里,而虚拟机用的磁盘,物理主机无法直接挂载,这样扫描公司提交的图片就需要拷贝到本地磁盘上,一是数据量巨大,第一期需要进数据库的图片就10多T,需要很长的时间来拷贝,二是拷贝会生成落地图片,就需要进行MD5校验,这需要更多的时间,客户提的需求是,在不生成落地文件的情况下将图片加载到数据库,对于这种需求,我首先想到2种方法,一种是在虚拟机上安装ORACLE客户端,SQLLDR将虚拟机上的图片加载到远程数据库,这种方法由于Windows虚拟机不能给登录权限,并且这批数据只能开放读权限而被否定,第二种方法就是将Windows虚拟机上扫描公司提交的图片以共享文件夹的形式提交给我们,然后将Windows的共享文件夹挂载到本地(linux服务器)的目录,也就是相当于将Windows共享的文件夹映射到linux服务器的目录下。
先测试下第一种方法,创建测试表T_LOAD_2M_SF:

SQL> create table t_load_2m_sf (id number, full_name varchar2(100),
2  create_date date, contents blob, constraint pk_t_load_1m_sf
3  primary key(id)) lob (contents) store as securefile;

创建SQLLDR的控制文件sqlldr_2M_sf.ctl,如下:

LOAD DATA
INFILE 'test.txt'
INTO TABLE T_LOAD_2M_SF
TRUNCATE
FIELDS TERMINATED BY ','
(ID CHAR(255),
FULL_NAME CHAR(255),
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)

创建SQLLDR的数据文件test.txt:

[oracle@dbserver1 sqlldr]$ vi test.txt
1,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0021-6.jpg
2,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0039-6.jpg
3,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0021-7.jpg
4,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0039-7.jpg
5,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0021-8.jpg
6,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0039-8.jpg
7,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0021-9.jpg
8,/home/oracle/sqlldr/02-01-006-000001/02-01-006-000001-0039-9.jpg

执行加载测试:

[oracle@dbserver1 sqlldr]$ sqlldr test/test@192.168.20.105/fhacdb
control=sqlldr_2M_sf.ctl
SQL*Loader: Release 11.2.0.2.0 - Production on Thu Feb 23 11:55:02
Copyright (c) 1982, 2009,Oracle and/or its affiliates.rights reserved.
Commit point reached - logical record count 7
Commit point reached - logical record count 8

登录数据库验证:

SQL> select * from T_LOAD_2M_SF;
ID  FULL_NAME                CREATE_DATE  CONTENTS
--  -----------------------  -----------  ---------------------------
 1  /home/oracle/sqlldr/02-  23-2-12      FFD8FFE14365457869660000494
    01-006-000001/02-01-006-              92A000800000009000F010200060
    000001-0021-6.jpg                     000007A000000100102000E00000
                                          0800000001201030001000000010
                                          000801A01050001000000A000000
                                          01B01050001000000A800
......

在测试下第二种方法,首先需要将Windows服务器(192.168.50.21)上的共享文件夹(02-01-006-000001)挂载到linux服务器的/mnt目录上,也就相当于将Windows服务器上的共享文件夹映射到linux服务器的/mnt目录下,操作如下:

[root@fhacdb ~]# mount -t cifs -o username=1,password=1
//192.168.50.21/02-01-006-000001 /mnt

进入到/mnt目录下,查看是否可以看到Windows共享文件夹的内容。

[root@fhacdb ~]# cd /mnt/
[root@fhacdb mnt]# ls
02-01-006-000001-0001-10.jpg      02-01-006-000001-0001-2.jpg
02-01-006-000001-0001-5.jpg       02-01-006-000001-0001-8.jpg
02-01-006-000001-0001-3.jpg       02-01-006-000001-0001-6.jpg
02-01-006-000001-0001-9.jpg       02-01-006-000001-0001-1.jpg
02-01-006-000001-0001-4.jpg       02-01-006-000001-0001-7.jpg

修改SQLLDR的数据文件为以下内容。

[oracle@dbserver1 sqlldr]$ vi test.txt
1,/mnt/02-01-006-000001-0001-1.jpg
2,/mnt/02-01-006-000001-0001-2.jpg
3,/mnt/02-01-006-000001-0001-3.jpg
4,/mnt/02-01-006-000001-0001-4.jpg
5,/mnt/02-01-006-000001-0001-5.jpg
6,/mnt/02-01-006-000001-0001-6.jpg
7,/mnt/02-01-006-000001-0001-7.jpg
8,/mnt/02-01-006-000001-0001-8.jpg

进行加载测试。

[oracle@dbserver1 sqlldr]$ sqlldr test/test control=sqlldr_2M_sf.ctl
SQL*Loader: Release 11.2.0.2.0-Production on Thu Feb 23 12:05:35 2012
Copyright (c) 1982, 2009,Oracle and/or its affiliates.rights reserved.
Commit point reached - logical record count 7
Commit point reached - logical record count 8

登录数据库查看是否加载成功。

SQL> select * from T_LOAD_2M_SF;
ID  FULL_NAME               CREATE_DATE CONTENTS
--  ----------------------- ----------- ---------------------------
 1  /mnt/02-01-006-000001-0 23-2-12     FFD8FFE143654578696600004949
    001-1.jpg                           0000800000001201030001000000
                                        010000801A01050001000000A000
                                        2A000800000009000F0102000600
                                        00007A000000100102000E000000
                                        1B01050001000000A800
......

经过测试和客户协商后,客户认为第二种方法可行,目前客户正在与负责网络和硬件的人员协商文件夹共享的问题,等文件共享后,就可以加载第一批数据入库。

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. mysql数据库表名的大小写问题 (累计阅读 4,432)
  2. 记一次MongoDB性能问题 (累计阅读 4,131)
  3. Windows与Linux文件系统互访的几种方法 (累计阅读 4,077)
  4. 如何更改字段至兼容的不同类型 (累计阅读 3,888)
  5. ubuntu下移动mysql数据库位置 (累计阅读 3,874)
  6. Mysql 4.1升级到5.0以后一个很郁闷的地方 (累计阅读 3,368)
  7. Mysql 5 数据库 中文乱码问题的解决 (累计阅读 2,768)
  8. ORACLE的几个函数在MYSQL里面的简单实现 (累计阅读 2,062)
  9. MySql lower_case_table_names迷思 (累计阅读 1,294)