在本文中,我将展示 SQL 加载器 + Unix 脚本实用程序的强大功能,其中 SQL 加载器可以使用自动 shell 脚本加载多个数据文件。这在处理大量数据以及需要将数据从一个系统移动到另一个系统时非常有用。
它适合涉及大量历史数据的迁移项目。那么就不可能为每个文件运行 SQL 加载程序并等待其加载。因此,最好的选择是让包含 SQL 加载命令的 Unix 程序始终运行。一旦文件夹位置中有任何文件可用,它将从该文件夹位置拾取文件并立即开始处理。
示例程序是我做的。在 Macbook 中,Oracle 的安装与 Windows 机器上的安装有所不同。
请观看包含如何在 Mac 上安装 Oracle 的详细步骤的视频。
让SQL 开发人员遵守 Java 8。
现在让我们来演示一下这个例子。
因为它是 Macbook,所以我必须在 Oracle 虚拟机内完成所有操作。
让我们看看下图 SQL Loader 是如何工作的。

需要使用 Shell 脚本 + SQL 加载器自动化将数百万学生的信息加载到学生表中。该脚本将始终在 Unix 服务器中运行并轮询。DAT 文件,一旦 DAT 文件就位,它将对其进行处理。另外,如果存在任何不良数据,则需要单独识别它们。
此类示例在需要加载数百万历史记录的迁移项目中非常有用。
从旧系统,将定期生成实时源(DAT 文件)并将其发送到新系统服务器。 在新系统中,服务器文件可用,并将使用自动化 Unix 脚本加载到数据库中。 现在让我们运行脚本,该脚本可以在Unix服务器上一直运行。为了实现这一点,整个代码被放入下面的 while 块中。
while true[some logic]done
rwxr-xr-x. 1 oracle oinstall 147 Jul 23 2022 student.ctl-rwxr-xr-x. 1 oracle oinstall 53 Jul 23 2022 student_2.dat-rwxr-xr-x. 1 oracle oinstall 278 Dec 9 12:42 student_1.datdrwxr-xr-x. 2 oracle oinstall 48 Dec 24 09:46 BAD-rwxr-xr-x. 1 oracle oinstall 1.1K Dec 24 10:10 TestSqlLoader.shdrwxr-xr-x. 2 oracle oinstall 27 Dec 24 11:33 DISCARD-rw-------. 1 oracle oinstall 3.5K Dec 24 11:33 nohup.outdrwxr-xr-x. 2 oracle oinstall 4.0K Dec 24 11:33 TASKLOG-rwxr-xr-x. 1 oracle oinstall 0 Dec 24 12:25 all_data_file_list.unxdrwxr-xr-x. 2 oracle oinstall 6 Dec 24 12:29 ARCHIVE


7、现在我再次删除表数据,只是为了证明脚本始终在服务器中运行,我将仅将两个 DAT 文件从 ARCHIVE 放置到当前目录。

-rwxr-xr-x. 1 oracle oinstall 147 Jul 23 2022 student.ctl-rwxr-xr-x. 1 oracle oinstall 53 Jul 23 2022 student_2.dat-rwxr-xr-x. 1 oracle oinstall 278 Dec 9 12:42 student_1.datdrwxr-xr-x. 2 oracle oinstall 48 Dec 24 09:46 BAD-rwxr-xr-x. 1 oracle oinstall 1.1K Dec 24 10:10 TestSqlLoader.shdrwxr-xr-x. 2 oracle oinstall 27 Dec 24 12:53 DISCARD-rw-------. 1 oracle oinstall 4.3K Dec 24 12:53 nohup.outdrwxr-xr-x. 2 oracle oinstall 4.0K Dec 24 12:53 TASKLOG-rwxr-xr-x. 1 oracle oinstall 0 Dec 24 13:02 all_data_file_list.unxdrwxr-xr-x. 2 oracle oinstall 6 Dec 24 13:03 ARCHIVE

10、该脚本始终在服务器上运行
[oracle@localhost example-sqldr]$ ps -ef|grep Testoracle 30203 1 0 12:53? 00:00:00 bin/bash ./TestSqlLoader.shoracle 31284 31227 0 13:06 pts/1 00:00:00 grep --color=auto Test
#!/bin/bashbad_ext='.bad'dis_ext='.dis'data_ext='.dat'log_ext='.log'log_folder='TASKLOG'arch_loc="ARCHIVE"bad_loc="BAD"discard_loc="DISCARD"now=$(date +"%Y.%m.%d-%H.%M.%S")log_file_name="$log_folder/TestSQLLoader_$now$log_ext"while true;dols -a *.dat 2>/dev/null > all_data_file_list.unxfor i in `cat all_data_file_list.unx`do#echo "The data file name is :-- $i"data_file_name=`basename $i .dat`echo "Before executing the sql loader command ||Starting of the script" > $log_file_namesqlldr userid=hr/oracle@orcl control=student.ctl errors=15000 log=$i$log_ext bindsize=512000000 readsize=500000 DATA=$data_file_name$data_ext BAD=$data_file_name$bad_ext DISCARD=$data_file_name$dis_extmv $data_file_name$data_ext $arch_loc 2>/dev/nullmv $data_file_name$bad_ext $bad_loc 2>/dev/nullmv $data_file_name$dis_ext $discard_loc 2>/dev/nullmv $data_file_name$data_ext$log_ext $log_folder 2>/dev/nullecho "After Executing the sql loader command||File moved successfully" >> $log_file_namedone## halt the procesing for 2 minssleep 1mdone
OPTIONS (SKIP=1)LOAD DATAAPPENDINTO TABLE studentFIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'TRAILING NULLCOLS(id,name,dept_id)
综上所述,这种方式可以通过SQL加载器+Unix脚本自动化的方式加载数百万条记录,以上参数可以根据需要设置。
文章转载自云原生数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




