批量产生大量相似的命令的例子

三牛哥 2021-3-15 8049

在DBA的工作中,我们经常需要批量产生大量的类似的命令,例如:


TRUNCATE TABLE WT.ABC;
TRUNCATE TABLE WT.DEFGH;
TRUNCATE TABLE WT.XYZ;

仔细观察上面的规律,你会很容易发现规律:除了表名不同,一行命令的其余部分是写死的。我们可以把表的名字放在一个文本文件里面,一行是一个表的名字:

ABC
DEFGH
XYZ

这样我们可以使用Perl/Python等脚本按行读取这个文件的内容,然后拼凑出我们需要的命令。我经常使用的perl脚本模板如下:


#!/usr/bin/perl
use strict;
use warnings;

if($#ARGV != 0) {
    print "Usage: p.pl filename\n";
    exit;
}

my $filename = $ARGV[0];
open(TXTFILE, '<', $filename)
or die "Could not open file '$filename' $!";

my $line;

while (<TXTFILE>) {
    chomp;
    next if /--/;
    $line = $_;
    $line =~ s/^\s+//;
    $line =~ s/\s+$//;

    print "TRUNCATE TABLE WT.$line\n";
    # print "expdp username/password directory=dpump tables=WT.$line dumpfile=WT.$line.dmp logfile=expdp.WT.$line.log parallel=32\n";

}


即使你不懂perl,稍微花费几分钟就可以读懂它的大致内容,就是你在命令行下输入一个参数作为文件名,这个脚本就会打开这个文件,按行读出来。如果这一行里面包含--,则视为这一行被注释掉了,就跳过。 然后用print命令拼凑出你需要的任意命令。

假设你的这个脚本叫p.pl,你的包含表名的文件叫做tab.txt,则可以执行: ./p.pl tab.txt


大家可以快速做一下实验。你可以使用which perl命令,拿到你所在的Linux服务器上perl程序所在的路径,修改一下第一行。

最新回复 (0)
返回
发新帖