将远程共享文件夹挂载到linux本地目录
今天客户提个新需求,负责扫描的公司提交的数据是存放在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 ......
经过测试和客户协商后,客户认为第二种方法可行,目前客户正在与负责网络和硬件的人员协商文件夹共享的问题,等文件共享后,就可以加载第一批数据入库。