asmcmd non-interactive commands in MS-DOS Batches

In the last days I was fighting with a nice behaviour of the asmcmd non-interactive mode in MS-DOS batches.

I wanted to delete several files located in ASM within a MS-DOS batch:

REM Script: asm_cleanup_DB112.cmd
set ORACLE_BASE=E:\oracle
set ORACLE_HOME=E:\oracle\product\grid-11.2.0
set ORACLE_SID=+ASM
set PATH=%ORACLE_HOME%\bin;%PATH%
asmcmd rm -f +TEMP/db112/temp_01.dbf
asmcmd rm -f +TEMP/db112/temp_02.dbf
asmcmd rm -f +REDO1/db112/redog1m1.dbf
asmcmd rm -f +REDO1/db112/redog2m1.dbf
asmcmd rm -f +REDO1/db112/redog3m1.dbf
asmcmd rm -f +REDO1/db112/redog1m2.dbf
asmcmd rm -f +REDO1/db112/redog2m2.dbf
asmcmd rm -f +REDO1/db112/redog3m2.dbf
 
As soon as I run the batch, the first file got deleted, but then the batch execution stops without continuing the next steps :-( I try to place the files into Single-Quotes, into Double-Quotes, but nothing helps, after the first asmcmd command the batch execution stops ...
This behaviour even occurs with "ls" commands and so on.
 
Oracle Metalink search = 0
Oracle Technet Forums = 1 thread with the same problem, but no answer since more then 2 years
 
After a little playing and re-thinking, I only found following solution: Build a FOR Loop in my batch.
I just created a textfile with my files which I want to delete:
 
# Content of File asm_file_list.txt
+TEMP/db112/temp_01.dbf 
+TEMP/db112/temp_02.dbf
+REDO1/db112/redog1m1.dbf
+REDO1/db112/redog2m1.dbf
+REDO1/db112/redog3m1.dbf
+REDO1/db112/redog1m2.dbf
+REDO1/db112/redog2m2.dbf
+REDO1/db112/redog3m2.dbf
 
Then I changed my batch to the FOR loop, which simple reads my above textfile with the list of my files to be delete and executed for each line the "asmcmd rm -f" command:
 
REM Script: asm_cleanup_DB112.cmd
set ORACLE_BASE=E:\oracle
set ORACLE_HOME=E:\oracle\product\grid-11.2.0
set ORACLE_SID=+ASM
set PATH=%ORACLE_HOME%\bin;%PATH%
for /f %%a in (asm_file_list.txt) do ( 
asmcmd rm -f %%a
)

Run the batch again and be happy :-)

1 Comments :: asmcmd non-interactive commands in MS-DOS Batches

  1. I was having a similar problem. Some initial testing suggests that if you place the call command in front of the asmcmd command i.e.
    call asmcmd ls /data/thing/*
    then you can have multiple asmcmd commands in your batch file.

Post a Comment