在本文中,我将展示 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.dat
drwxr-xr-x. 2 oracle oinstall 48 Dec 24 09:46 BAD
-rwxr-xr-x. 1 oracle oinstall 1.1K Dec 24 10:10 TestSqlLoader.sh
drwxr-xr-x. 2 oracle oinstall 27 Dec 24 11:33 DISCARD
-rw-------. 1 oracle oinstall 3.5K Dec 24 11:33 nohup.out
drwxr-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.unx
drwxr-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.dat
drwxr-xr-x. 2 oracle oinstall 48 Dec 24 09:46 BAD
-rwxr-xr-x. 1 oracle oinstall 1.1K Dec 24 10:10 TestSqlLoader.sh
drwxr-xr-x. 2 oracle oinstall 27 Dec 24 12:53 DISCARD
-rw-------. 1 oracle oinstall 4.3K Dec 24 12:53 nohup.out
drwxr-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.unx
drwxr-xr-x. 2 oracle oinstall 6 Dec 24 13:03 ARCHIVE
复制
10、该脚本始终在服务器上运行
[oracle@localhost example-sqldr]$ ps -ef|grep Test
oracle 30203 1 0 12:53? 00:00:00 bin/bash ./TestSqlLoader.sh
oracle 31284 31227 0 13:06 pts/1 00:00:00 grep --color=auto Test
复制
#!/bin/bash
bad_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;
do
ls -a *.dat 2>/dev/null > all_data_file_list.unx
for 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_name
sqlldr 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_ext
mv $data_file_name$data_ext $arch_loc 2>/dev/null
mv $data_file_name$bad_ext $bad_loc 2>/dev/null
mv $data_file_name$dis_ext $discard_loc 2>/dev/null
mv $data_file_name$data_ext$log_ext $log_folder 2>/dev/null
echo "After Executing the sql loader command||File moved successfully" >> $log_file_name
done
## halt the procesing for 2 mins
sleep 1m
done
复制
OPTIONS (SKIP=1)
LOAD DATA
APPEND
INTO TABLE student
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
id,
name,
dept_id
)
复制
综上所述,这种方式可以通过SQL加载器+Unix脚本自动化的方式加载数百万条记录,以上参数可以根据需要设置。
文章转载自云原生数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1322次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
793次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
724次阅读
2025-03-06 09:41:49
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
558次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
465次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
356次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
314次阅读
2025-03-26 23:27:33
Oracle数据库调整内存应该注意的几个问题
听见风的声音
311次阅读
2025-03-18 09:43:11
Oracle分区和执行计划相关的几个问题
听见风的声音
308次阅读
2025-03-07 08:51:42
记一次ORA600内部错误故障分析与修复实录
Digital Observer
285次阅读
2025-03-05 09:33:15