使用SQL*PLUS动态生成批量脚本
将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。
例如:
生成一个脚本,分析system用户下的所有的表:
a. 创建analyze_system.sql文件,执行如下语句:
spool d:\analyze_table.sql
SELECT 'analyze table '||table_name||' compute statistics;' from user_tables;
Spool off
b. 以system用户登录数据库
SQLPLUS > @ d:\analyze_system.sql
c. 在D盘根目录下会生成文件analyze_table.sql文件,包含分析所有表的语句,如下所示:
SQL> SELECT 'analyze table '||table_name||' compute statistics;' from user_tables;
'ANALYZETABLE'||TABLE_NAME||'COMPUTESTATISTICS;'
----------------------------------------------------------------
analyze table AQ$_INTERNET_AGENTS compute statistics;
analyze table AQ$_INTERNET_AGENT_PRIVS compute statistics;
analyze table AQ$_QUEUES compute statistics;
analyze table AQ$_QUEUE_TABLES compute statistics;
analyze table AQ$_SCHEDULES compute statistics;
analyze table DEF$_AQCALL compute statistics;
…
已选择128行。
d. 对生成的analyze_table.sql文件进行编辑去掉不必要的部分,只留下analyze table …..语句
e. 在system用户下运行analyze_table.sql文件,分析system用户下所有的表。
SQLPLUS > @ d:\analyze_table.sql
在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,如果不进行编辑去掉不必要的部分则在执行过程中就会报错(SP2-0734: 未知的命令开头),给实际的操作带来诸多不便。
在SQLPLUS中有很多环境变量,设置合适的环境变量我们就能避免上面的问题而不用人工手动去编辑去掉不必要的部分,这对于程序的自动化执行很有好处;
例如,河北SDE数据库优化过程中需要在计划任务中执行Spool出来的脚本,我们可以在
SQLPLUS中设置以下变量:
set echo on --是否显示执行的命令内容
set feedback off --是否显示 * rows selected
set heading off --是否显示字段的名称
经过这样设置环境变量后,再执行
SQL>conn system/system
SQL> spool d:\analyze_table.sql
SQL>SELECT 'analyze table '||table_name||' compute statistics;' from user_tables;
SQL> spool off
查看d:\analyze_table.sql可以发现就只包含分析所有表的语句:
analyze table AQ$_INTERNET_AGENTS compute statistics;
analyze table AQ$_INTERNET_AGENT_PRIVS compute statistics;
analyze table AQ$_QUEUES compute statistics;
analyze table AQ$_QUEUE_TABLES compute statistics;
analyze table AQ$_SCHEDULES compute statistics;
analyze table DEF$_AQCALL compute statistics;
…
这样在system用户下运行analyze_table.sql文件,分析system用户下所有的表就不用再手工编辑了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8720638/viewspace-321776/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8720638/viewspace-321776/