Issues with IDS11 migration
Posted in 2010
Topics: Installation, Setup & Upgrades, Error Codes & Troubleshooting, Connectivity: ODBC / JDBC / .NET, Migration, Import/Export & Data Conversion, Platform-Specific Issues, Internationalization & Character Sets
Can someone tell me how does this LANG parameter behaves and what is the
impact?
For example :
LANG=C versus LANG=en_US
After migrating to IDS11.FC6.W2 from 7.31.UD8 on AIX 5.3 and CSDK.3.5 on
the windows desktop in one server the users are receiving the following
error code -23197 and they cannot connect to the database.
-23197
Database locale information mismatch.
The locale information GL_CTYPE or GL_COLLATE in the system catalog of the
specified database does not match the locale information in the specified
environment variable DB_LOCALE. Check the value of DB_LOCALE
Those two are set to en_US.CP1252 but on the database server query of
systables show
"select tabname, site from systables where tabname like ' GL%';
tabname GL_COLLATE
site en_US.819
tabname GL_CTYPE
site en_US.819
Changing the value of CLIENT_LOCALE = EN_US.8859-1 of my laptop works but
not taking a chance that late in the ball game to make this change in all
the desktops without further testing so I revert back to IDS7.
Interestingly, we compared all servers where users are able to connect
versus the one that is not working and we found one discrepancy.
Server where it does not work!
$ locale
LANG=C
LC_COLLATE="C"
LC_CTYPE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=
Sever where it works
$ locale
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=
By the way both settings work in 7.31.UD8. Is LANG set to C on the OS the
reason why people can't connect to that one server. Informix install was
most likely done with that same setting of LANG on that server, what is the
impact.
By reviewing the installshield wizard of IDS11, it is said that
If using a locale/language other than the default
Set $CLIENT_LOCALE
Set $DB_LOCALE
Set $SERVER_LOCALE
Set $DBLANG
Note: testing connection with ODBC driver via MS Excel Spreadsheet works
fine with both settings.
Any insights would be greatly appreciated!
Thanks in advance!
jp
On 06-09-2010 1:59, jpierrot@chubb.com wrote: > Can someone tell me how does this LANG parameter behaves and what is the > impact? > For example : > LANG=C versus LANG=en_US > After migrating to IDS11.FC6.W2 from 7.31.UD8 on AIX 5.3 and CSDK.3.5 on > the windows desktop in one server the users are receiving the following > error code -23197 and they cannot connect to the database. > > *-23197 * > > ------------------------------------------------------------------------ > > Database locale information mismatch. > > The locale information GL_CTYPE or GL_COLLATE in the system catalog of > the specified database does not match the locale information in the > specified environment variable DB_LOCALE. Check the value of DB_LOCALE > > Those two are set to en_US.CP1252 but on the database server query of > systables show > > "select tabname, site from systables where tabname like ' GL%'; > tabname GL_COLLATE > site en_US.819 > tabname GL_CTYPE > site en_US.819 Error 23197 means your database DB_LOCALE is set to one value and that the client is using another. In older versions of the client software, if you did not specify it, it would use the windows default (CP1252). Also on older versions of the server side software that would work even if you had en_us.819 on the server side. This was wrong. IDS 11 (it started in late 9.40 fixpacks and not so late - xC5 maybe - fixpacks of 10) the engine will not allow connections to the database with different locale. Since CSDK 2.90.TC6 (I may be missing the fixpack by 1 or 2...) the client will ask the database which DB_LOCALE it uses if you don't specify it. LANG should be irrelevant for this AFAIK... Which make your observations a bit weird, since you explicitly state that it make s a difference. I would suggest you open a PMR with this. Tech support will be more than happy to guide you through this. > > Changing the value of CLIENT_LOCALE = EN_US.8859-1 of my laptop works > but not taking a chance that late in the ball game to make this change > in all the desktops without further testing so I revert back to IDS7. > This points to that the DB_LOCALE is en_us.819 which is the default for Unix systems... > Interestingly, we compared all servers where users are able to connect > versus the one that is not working and we found one discrepancy. > The problem is more on the client than on the server. Are your clients all on CSDK 3.50? > By the way both settings work in 7.31.UD8. Is LANG set to C on the OS > the reason why people can't connect to that one server. Informix install > was most likely done with that same setting of LANG on that server, what > is the impact. > Version 7 was permissive to this issue. Which in turn created a BIG problem for some cusotmers... Basically, they ended up with a settings on the client side where DB_LOCALE=CP1252 and CLIENT_LOCALE=CP1252, and a server side configuration where DB_LOCALE=en_us.819. That means that the customer were able to insert characters from the CP1252 codeset into a database using 819. And because programs like MS word love to change some characters (quotes, dash...) by CP1252 only codes, it can bring more problems in the future. Finally, there is an undocumented variable that can instruct the engine to behave like it used to (wrong). I would not recommend it's use unless you don't have other options... Regards.