SQL*Loader其具有如下的优势
一是可以直接被前台应用程序调用。如开源的COMPIERE企业管理应用系统,其就是采用Oracle的数据库系统。在COMPIERE这个应用系统中,有一项很强大的功能,就是数据导入功能。其不但可以按现有的模板导入数据,而且,用户还可以自定义导入的格式。这对于系统在基础数据导入的时候,非常的有用。 但是,其这个功能的开发,确很简单,因为其基本上都是直接调用后台数据库系统中的SQL*Loader模块。命令行模式的导入模块,可以直接被前台的应用程序调用,这是其最大的优势。
二是可以从既定文件中大量导入数据。利用SQL*Loader工具,可以从既定文件中,如逗号分隔符文件或者固定宽度的文件,把这些文件中的大量记录按照一定的规则导入到Oracle数据库系统中去。这个导入的效率比图形界面来说,也要高的多。
三是可以实现把多个数据文件合并成一个文件。我们都知道,Oracle数据库中,可以把一个数据库应用所需要的数据存放在多个数据文件中,以追求比较高的数据库性能,以及比价高的数据库安全性。但是,有时候,我们也可能需要把这几个数据文件合二为一,此时,就可以采用SQL*Loader工具把它们进行合并。
四是修复、分离坏的记录。有时候,我们需要导入的数据跟Oracle数据库系统的数据表可能会存在一些冲突,导致数据导入的失败。如可能需要导入的数据字段太长,超过了数据表的最大长度限制,此时,就会导致数据导入的失败。利用SQL*Loader导入工具,可以把这些不符合规则的记录分离出来,存放在一个独立的文件中。而符合规则的数据,则可以被正常的导入。如此的话,就可以提高数据导入的准确性。
下面,我们来看看具体如何使用这个Oracle数据库系统为我们准备的好帮手。
一般SQL*Loader模块至少需要两个文件,才可以使用
一是数据文件。数据文件,顾名思义,就是我们需要导入的数据集合。对于Oracle系统来说,其可以支持多个格式的数据文件,如逗号分隔符或者TAB键分隔符或者分号分隔符等文本文件,也支持固定宽度的文本文件等等。不过在实际应用中,用的最多的还是逗号分隔的文本文件。
二是控制文件。控制文件其起的作用就是建立数据文件与Oralce数据表字段之间的一一对应关系。简单的说,把数据文件中的某个内容放在Oracle数据表中的那个字段上,这就是控制文件所起的主要作用。
另外还有一个文件,也非常有用,叫做坏文件。如果我们在命令行工具中,指定了这个坏文件,则导入过程中,一些导入不成功的记录,则会被保存在这个坏文件中。所以,对于数据库管理员来说,这个文件有时候往往比数据导入日志文件更加的实用。所以,笔者建议,若企业对于数据导入的准确性要求比较高的画,则在使用SQL*Loader导入数据的时候,最好能够指定这个坏文件。这对于我们后续核对导入数据的准确性,具有很大的实用价值。
为了更好的使用这个导入工具,笔者有如下建议
1、在制作数据文件的时候,需要注意原有数据表的限制。也就使说,数据文件中的记录必须符合数据表的一些约束条件,否则,不符合条件的数据将无法被导入。如需要考虑数据类型是否相符、字段长度有没有超过限制、有没有违反主键、外键的约束等等。只有符合这些约束的记录,才能够被成功的导入。否则的话,数据将无法被成功装载。为了避免这种情况,笔者建议再利用这个工具的时候,要指定“坏文件”。只有如此,数据库才能够再导入的过程中,把一些失败的记录写到我们指定的文件中,如此,我们就可以通过调整,然后把这些不符合规则的数据也装入到数据库中去。
2、前台应用程序在设计基础数据导入功能的时候,最好直接采用这个模块。因为这个模块跟Oracle数据库集成的比较好,能够最大限度的保障导入数据的准确性。而且,还可以节省很多前台的程序代码。不过有点值得可惜的是,SQL*Loader模块,现在是Oracle数据库独享的应用模块。也就是说,只有在Oracle数据库平台上的应用程序,才可以直接调用。若一个应用程序支持多个数据库平台的时候,则再设计这个数据导入功能的时候,需要注意了,这不像SQL语句那样的通用。
3、在数据导入之前,最好先最好相关的数据备份。无论是采用图形化的数据导入工具,还是采用命令行的数据导入工具,有一个基本的原则,大家必须遵守,就使在成批导入数据之前,必须先作好数据库的备份。如此可以把数据导入错误的影响降至到最低。
4、严格限制数据导入的权限。虽然可以在后台数据库中限制SQL*Loader应用模块的使用权限,不过,最好还是能够在前台应用程序中加以控制。如在前台应用程序中,让其只有系统管理员才能够访问这个基础数据导入窗口等等。因为数据库的访问权限,在前台实现的话,比较灵活。而在后台固定死了的话,前台系统权限设计往往会失去灵活性。这是我们在数据库设计与前台应用程序设计的时候,需要尽量避免的。