ORA-01078/ LRM-00123: Troubleshoot Junk Characters in Oracle Initialization File
May 6, 2014 1 Comment
So many times we stuck into situation where we were helpless to start database instance using simple oracle text initialization file for auxiliary instance or some test instance. Usually this is very common whenever we copy the sample or source parameter file from some html or formatted document editor, which allow Unicode text. Frustrating thing is that even after checking test file on normal vi editor or notepad couple of time will also not allow to get rid of that mess-up in parameter file. In this situation there are multiple ways to fix the issue.
- Copy the content into notepad and then copy back to the unix console to see if it help. Focus on special characters like ‘, ‘ , “,” etc . Autosuggest options of smart word editors usually convert actual characters into these formatted charters. As soon as you copy the full parameter file content in to notepad or any other low end text editor it’s not that difficult to manually correct it until unless the size of configuration file is large.
- Other way is to use od (Octal Dump), a very old utility of unix OS.
Today we will demonstrate the troubleshooting of junc character by using od as well as conventional method.
Here we have created two text parameter files and one with ‘ ‘ instead of ‘ ‘
[oracle@maskmt11g.lgk.nmk] ls -lrt initMASK*
-rw-r–r– 1 oracle oinstall 912 May 6 16:46 initMASK11G.ora_correct
-rw-r–r– 1 oracle oinstall 916 May 6 16:54 initMASK11G.ora
[oracle@maskmt11g.lgk.nmk] diff initMASK11G.ora_correct initMASK11G.ora
17c17
< *.db_name=‘mask11g‘
—
> *.db_name=‘mask11g‘
Let’s try to start instance using this corrupted parameter file.
SQL> startup nomount pfile=’/home/oracle/initMASK11G.ora’
LRM-00123: invalid character 128 found in the input file
ORA-01078: failure in processing system parameters
And what do these errors mean to us.
[oracle@maskmt11g.lgk.nmk] oerr LRM 123
123, 0, “invalid character %u found in the input file”
// *Cause: A character that is invalid was found in the input file.
// *Action: Specify an input file that contains only valid characters.
[oracle@maskmt11g.lgk.nmk] oerr ORA 1078
01078, 00000, “failure in processing system parameters”
// *Cause: Failure during processing of INIT.ORA parameters during
// system startup.
// *Action: Further diagnostic information should be in the error stack.
Now if we open that corrupted file in Notepad++
And in notepad
So by observing the content of file we could see the difference but it’s sometimes tough during long working hours when you continuously watching computer screen then that minute difference between ‘ ‘ and ‘ ‘ in a properly populated parameter or configuration file will looks like twins. So chances are there to miss that difference or delay will cost you some time and add stress as well.
Now let’s give a shot to od:
[oracle@maskmt11g.lgk.nmk] od -c initMASK11G.ora > od_corrupt.out
[oracle@maskmt11g.lgk.nmk] od -c initMASK11G.ora_correct > od.correct.out
Let’s compare the output files:
[oracle@maskmt11g.lgk.nmk] diff od.correct.out od_corrupt.out
39,58c39,59
< 0001140 * . d b _ n a m e = ‘ m a s k 1
< 0001160 1 g ‘ \n * . d i a g n o s t i c
< 0001200 _ d e s t = ‘ / u 0 2 / a p p /
< 0001220 o r a c l e ‘ \n * . d i s p a t
< 0001240 c h e r s = ‘ ( P R O T O C O L
< 0001260 = T C P ) ( S E R V I C E = m
< 0001300 a s k 1 1 g X D B ) ‘ \n * . m e
< 0001320 m o r y _ t a r g e t = 9 4 3 7
< 0001340 1 8 4 0 0 \n * . o p e n _ c u r
< 0001360 s o r s = 3 0 0 \n * . p r o c e
< 0001400 s s e s = 5 0 0 \n * . r e m o t
< 0001420 e _ l o g i n _ p a s s w o r d
< 0001440 f i l e = ‘ E X C L U S I V E ‘
< 0001460 \n * . s e r v i c e _ n a m e s
< 0001500 = ‘ m a s k 1 1 g . l g k . n m
< 0001520 k , m a s k _ o w c . l g k . n
< 0001540 m k ‘ \n * . s e s s i o n s = 5
< 0001560 5 5 \n * . u n d o _ t a b l e s
< 0001600 p a c e = ‘ U N D O T B S 1 ‘ \n
< 0001620
—
> 0001140 * . d b _ n a m e = 342 200 230 m a s
> 0001160 k 1 1 g 342 200 231 \n * . d i a g n o
> 0001200 s t i c _ d e s t = ‘ / u 0 2 /
> 0001220 a p p / o r a c l e ‘ \n * . d i
> 0001240 s p a t c h e r s = ‘ ( P R O T
> 0001260 O C O L = T C P ) ( S E R V I
> 0001300 C E = m a s k 1 1 g X D B ) ‘ \n
> 0001320 * . m e m o r y _ t a r g e t =
> 0001340 9 4 3 7 1 8 4 0 0 \n * . o p e n
> 0001360 _ c u r s o r s = 3 0 0 \n * . p
> 0001400 r o c e s s e s = 5 0 0 \n * . r
> 0001420 e m o t e _ l o g i n _ p a s s
> 0001440 w o r d f i l e = ‘ E X C L U S
> 0001460 I V E ‘ \n * . s e r v i c e _ n
> 0001500 a m e s = ‘ m a s k 1 1 g . l g
> 0001520 k . n m k , m a s k _ o w c . l
> 0001540 g k . n m k ‘ \n * . s e s s i o
> 0001560 n s = 5 5 5 \n * . u n d o _ t a
> 0001600 b l e s p a c e = ‘ U N D O T B
> 0001620 S 1 ‘ \n
> 0001624
Here is the screenshot of terminal where it’s hard to detect the difference. Only our odd friends are listed as three digit triplets while you will see single digit for almost all other characters.
Thanks for reading the article; I’ll appraise your thoughts/amendments/suggestions to improve my work.
I got same error with ASM. Couldn’t find any traces of it in MOS, but your article gave me a clue 🙂
$ asmcmd
KFOD-00101: LRM error [123] while parsing command line arguments
Connected to an idle instance.
The reason was a bogus init+ASM.ora which was apparently a copy of spfile ))
$ ls -la
-rw-r—–. 1 oracle oinstall 1536 Oct 16 2021 init+ASM.ora
-rw-r—–. 1 oracle oinstall 1536 Oct 16 2021 spfile+ASM.ora