A new version of the NTUtils
package is available on the IIUG Software Repository
NTUtils is a collection of tools designed to be useful for Windows DBA's and administrators. The new version supports IDS 11.50 and the latest Windows operating systems. The coding enhancements were done by a team of Tech Support engineers Randy House, Liesel Bach and Suma Vinod.
Here is a summary of the contents:
addrights - add the user rights required to start IDS to the local account specified
cfgpatch - changes onconfig.std values in the IDS Windows media. For IDS versions < 11
ch2ch - converts ascii characters in a file from one to another
Example: To convert each tab character (ascii 9) into to 4 spaces (ascii 32): ch2ch myfile.txt 9 32 4copydefault - copies the contents of:
HKEY_USERS\.DEFAULT\Software\Informix to: HKEY_CURRENT_USER\Software\software\Informix
Useful when an administrator wants to give every user the same Informix client settings, but doesn't want to set them manually for each user using setnet32
d2u.exe - Strips the CR from CRLF sequences in a file
gettoken - Returns Token information for a running Windows process
ipcs - displays shared memory segments
ixset.exe - Sets Informix environment variables in the Registry for the specified InformixServer
Logoff - Command line utility to log off, shut down or restart the machine
nterror - Converts a Windows Operating System error number into an error message
Onpipe - Sends command to the IDS named pipe to be executed in the context of the IDS process
Onregcheck.exe - Checks and prints the Informix Dynamic Server Registry settings
setsysenv - Set system or user environment variables
tapeinfo.exe - Gather information about a tape device
For more information view the Readme
, and to download the tools visit here: http://www.iiug.org/software/index_all.html#ntutils
IDS works well in a Microsoft Cluster environment and has had dedicated code to handle cluster failover for several years. There is also a utility called ClusterIT
which was designed to make IDS cluster set-up on Windows easier, but Windows clustering generally is one of those areas where the Informix documentation has always been a bit thin.
Thomas Matthae - the guy who created ClusterIT - recently wrote a developerWorks article entitled IDS and ClusterIT -- How to set up Informix in a Microsoft Cluster Environment
which redresses the documentation gap. It has an overview of the Windows Cluster environment, the Cluster Administrator, and goes through a step-by-step installation of IDS in a clustered environment.
Since there is no command line finderr
program supplied with IDS on Windows, and since the GUI finderr program supplied with CSDK doesn't work on Windows Vista or Windows Server 2008 without having to download extra files (we're working on that), here's a cheap and cheerful Windows batch file that will return the error description for an error number passed to it on the command line.
@echo execute function task('print error', '%1') | dbaccess sysadmin 2>NUL
It takes advantage of one of the SQL Admin API
commands introduced in IDS 11.10, PRINT ERROR
, which will print the text for any error numbers:
Make sure IDS is online and grant connect permission to the sysadmin database for any user who runs it. Here are some examples of calling it:
(expression) A syntax error has occurred.
(expression) Explicit path name too long.
If that doesn't cut it and you want more fancy search capabilities, consider using the BTS extension
One of the features I particularly liked during the Windows Server 2008 compatibility testing was the Server Core
installation option. This is a minimal installation of Server 2008 designed for installing specific "roles" such as DHCP server, DNS, Media Server etc. The standard desktop is gone and in its place is a blank screen and a command window. In Linux terms, think of it like JeOS
Windows Server 2008 Core
You can administer a Server Core machine using the command line - there are many new and enhanced commands available in Server 2008 to facilitate command line administration - or graphically from another machine via MMC
. The idea is that these core machines will be used for specific pre-defined server roles, with all extraneous features removed. This allows for a smaller footprint, better performance and improved security out of the box.
Though designed for pre-defined roles and not applications, there is nothing to stop you installing your own software on these machines if you're comfortable with the interface. To me Server Core makes an ideal secure high-performing host for Informix Dynamic Server. In the lab we experimented with installing IDS 11.50, CSDK 3.50 and OpenAdmin Tool 2.20 on a Server Core image running on Virtual PC
, and they installed with no problems. I also installed a copy of Firefox Portable
so I could run OAT directly on the machine, though it would make more sense to run the browser remotely.
OAT running on Server Core
I see Server Core as having a lot of potential as a backend machine running IDS, or as an appliance running under Virtual PC with a complete solution installed, for example: Windows Server 2008 Core + IDS + CSDK + < Insert solution here>
What I would really like to see is a way to create portable appliances like this that could boot from a USB drive, but in the meantime it's easy to play around with different configurations using Virtual PC.[Read More
After a rather hectic week I am finally finding the time to write about an recent trip to a Windows Server 2008 Application Compatibility Readiness Lab
in Redmond to put Informix Dynamic Server through its paces on Windows Server 2008. We did a similar exercise for Windows Vista last year (#1
) that proved very useful in identifying compatibility problems early on and testing performance improvements.The Lab
The readiness labs are located in the Platform Adoption Center
, building 20. This year I went along with Mirav from our kernel performance team. We had the same lab as last time as far as I can tell, which by default has 4 W2K8 machines configured to order. As we wanted to run comparative performance tests in addition to compatibility tests we were fairly demanding of hardware and ended up setting a record for number of machines crammed into the lab (Win2K8, 32-bit, 64-bit, with HyperVisor & without, Win2K3, Linux, etc..) - a task our hosts cheerfully took on.
Mirav and I getting to grips with Windows Server 2008
The readiness program consists of some presentations on Windows Server 2008 features, which have some overlap with Vista features, an introduction to the WS08 Logo Program
, Windows Error Reporting
, and a Security Analysis. The rest of the time we are free to play around with the machines and try out new features.Informix Compatibility
I plan two more posts this week describing running IDS on Windows Server 2008 in more detail, but here is a quick summary for the impatient:
- IDS 11.50 works fine on Windows Server 2008 with approximately 30% performance improvement for network intensive operations over Windows Server 2003 on the same hardware (based on ANTS testing with >500 users).
- When installing IDS 11.50.xC1 you get a pop-up error warning the IDS Message service did not start. This is logged internally as defect idsdb00160129 - contact tech support for latest status. The Message service is not required for IDS operation.
- In some circumstances CSDK 3.50.xC1 installation appears to hang on Server 2008 and Vista when it reaches the "Removing backup files" phase. CSDK works fine after killing the process or rebooting (idsdb00160123).
- 64-bit IDS 11.50.FC1 install fails on Intel machines with PROCESSOR_IDENTIFIER=Intel64 (idsdb00160153). This problem does not occur on AMD or other Intel processors. If you have this platform contact IBM tech support for a patch.
- We plan to address these incompatibilities in xC2 of the server and CSDK releases.
Additional articles planned will cover: Compatibility in more detail, Performance, Server 2008 Core and Virtualization. Logistical Support
I noticed one key difference from last year. The ice cream freezer stayed well stocked throughout the week. As always, copious quantities of snacks were provided along with meals. I can only put this down to fear of what might happen if sleep-deprived bloggers lose their sugar high. Of course being entirely focussed on the technology I didn't give any of this much thought.
A quick survey of the freezer contents
As for the Vista program last year, the W2K8 readiness program proved most valuable for identifying incompatibilities early and testing performance improvements. We also found we learned a lot in having the opportunity to dedicate a few days to using the OS and its new features, and also having experts on hand who could help us with solve problems such as how to do function profiling which will benefit follow-up performance analysis.
From a DBA perspective Windows Server 2008 provides a good performance improvement with sufficiently powerful hardware and has some useful file system improvements. I particularly liked the efforts around improved command line interface, and I think the concept of the Server Core has a lot of potential - more on this later.[Read More
My erstwhile colleague Johann Backlund writes from Sweden:
...I thought I would take a chance on guessing your email address to send you some of my experiences regarding IDS shared memory allocation and DLL's ...maybe something you could include in your blog series on the topic (part 1, part 2, part 3). I had planned to send this as a comment to your blog, but since comments are disabled...(hint, hint ;o)...
I'm working with a customer that just took the big step from 7.31 to10.00. The migration went fairly well, but after a week or so they gotproblems with onstat, onmode and oncheck. They got the standard error:
shmat: : operating system errorMapViewOfFileEx: w32ec=487 at nt_shm.c:663Unable to attach to shared memory.Invalid argument
and this seemed to occur when the total shared memory size had grown toaround 1.7GB. They are running 10.00.TC6X2 with /3GB turned on.
We tried applying the KB913409 hotfix and ran this with both 10.00.TC6X2and 10.00.TC7 (because of the fix for IC52767), but we could stillreproduce the problem.
After some experiments, I managed to pinpoint the exact segment causingthe problem and compared the set of DLL's loaded by oninit.exe with theDLL's loaded by the other utilities. I found that there were two DLL's inthe address space occupied by that segment: WINMM.DLL and PSAPI.DLL.
By increasing SHMADD to 34000, that particular address space wasn't usedby IDS and this allowed the customer to allocate all of their memorywithout causing problems for onstat et al.
So, this problem can actually occur even though DLL's are loaded in thecorrect address space and the best way to avoid it is to set SHMADD to ahigher value to make it stay away from those small areas in the system DLLaddress space. Also, I think Informix should consider to:
* make oninit.exe load the same DLL's as the shared memory based utilities. * have oninit.exe stay away from the system DLL address space altogether (not sure that Win32 API allows this in a simple way). * add documentation on the problem with suggestions on increasing SHMADD - maybe even set the minimum value to a higher value than now (like 64M).
About disabling comments. Unfortunately I had to disable comments on the blog the other weekend after getting 150 spam comments in the space of a couple of hours. Each one had to be manually removed. DeveloperWorks has since installed new a captcha mechanism, so I might re-enable them soon when I'm feeling brave. Comments have been temporarily switched off on IDS Experts
What Johan's comments show is that there is more than one approach to optimizing shared memory usage on the 32-bit Windows platform. You can rebase DLLs out of the way, but tuning the size of shared memory segments can be equally useful. Thanks to Microsoft not seeming to place a very high priority on DLL base address standards this problem needs to be revisited with almost every operating system service pack. At least 64-bit Windows gets over this problem with 8TB of addressable space.[Read More
There have been some major problems with IDS running in Windows domains, and on domain controllers lately, and now is a good time to summarize those problems and what to do about them. I should start with a confession - we were not doing enough testing of Windows domain installation scenarios on IDS which allowed problems to creep in. As part of this investigation several new QA tests were introduced to prevent problems like this recurring.
Below is a summary of known problems with their APAR numbers which you can reference when communicating with Tech Support. APAR numbers are the defect reference numbers that begin with ICxxxx. These are only generated when a customer case is attached to a problem. If a product defect was identified and fixed internally the reference I quote starts with "idsdb" and it will be equally meaningful to tech support.
All of these problems are fixed in the latest PID (Post Interim Drop) releases of the IDS 10 and 11 codelines: 10.00.TC8W1
. If necessary call tech support to discuss the status of individual defects in more detail and whether it is appropriate to receive a patch.IC55604 WINDOWS: IDS DOMAIN INSTALL IS NOT WORKING
If the Install in Domain option is checked and if the informix user does not exist on the PDC/BDC, then an error message like the following appears: Installation Message --------------------------- The user DOMAIN\informix does not exist. Please specify an existing user name. --------------------------- IC55601 WINDOWS: IDS CANNOT BE INSTALLED INTO A MICROSOFT WINDOWS DOMAIN
In a new installed and configured MS Windows domain of Windows Server 2003 Enterprise an IDS version 10 cannot be installed. After the installation was started, a new user has to be created during the installation process. When the password for the new user 'informix' was inserted, and the 'ok' button was used an error message box like this appears: --------------------------- Installation Message --------------------------- The user DOMAINNAME\informix does not exist. Please specify an existing user name. --------------------------- OK --------------------------- Normally the information for the new user 'informix' should be collected. Therefore this user cannot exist on this system at this time.IC55169 WINDOWS DOMAIN USERS ARE ONLY ACCEPTED AS DOMAIN\USERNAME NOT USERNAME
You have a Windows 2000 domain style user, and a client computer that belongs to that domain. Starting from IDS 10.00.TC6 when authenticating domain users, the only format accepted is DOMAINNAME\username while username always returns error -951.(also reported as idsdb00153303 for IDS 11.10.xC2)Defects which only occur in IDS 11.10IC55490 WINDOWS: IDS 11 INSTALL ON DOMAIN CONTROLLER FAILS WITH NOROLESEP_CREATEINFXUSER 3
When IDS 11 is installed on a Windows Domain Controller on which the informix user does not exist the installation fails with the following error: norolesep_createinfxuser 3 - Could not add the specified user to the group. Although the Informix user and the Informix-Admin group get created, the Informix user is not added to the Informix-Admin group and not granted the required privileges to start IDS as aservice. This problem is specific to the IDS 11.idsdb00134811 ONINIT FAILS WITH IXDBSA GROUP ERROR AFTER INSTALLING ON WINDOWS PRIMARY DOMAIN CONTROLLER
It seems like every time Microsoft release a new service pack they introduce a DLL load address regression with it. For a little background on DLL load addresses and the problems they can cause for applications such as IDS refer to two earlier blog entries: part 1
, part 2
This time the culprit is the home networking configuration manager DLL hnetcfg.dll
. In IDS installations with large shared memory configurations on Windows Server 2003 SP2
oncheck can fail with an error like this:
shmat: : operating system error
MapViewOfFileEx: w32ec=487 at nt_shm.c:663
Unable to attach to shared memory.
The default load address of hnetcfg.dll changed from 0x7F010000
in Windows Server 2003 SP1 (with KB913409
hotfix) back to an address space fragmenting 0x5F270000
To resolve the new problem, ask Microsoft for a fix of KB 948656
ps. Thanks to Tim Steele in Australian Advanced Support for keeping track of these defects and chasing Microsoft.[Read More
In earlier versions of IDS on Windows, (10 and below), the installer would always create a demo instance during a new installation or when installing to a new folder. The user has the option to initialize the new instance or not via a checkbox.
In IDS 11.10, which was the first Windows IDS installer based on Installshield, this behaviour changed somewhat. A new instance was only created if the user selected the "Initialize instance" checkbox. If that checkbox was not checked, no instance would be created, so the Instance Manager utility (instmgr.exe) would need to be executed after installation to create an instance.
Some customers missed the old functionality, so to fix this in the short term an undocumented command line argument -reginstance
was added to the 11.10 installer.
So if you want the old behaviour, where you are prompted for instance configuration information and an instance is created by default even if the "Initialize instance" checkbox is not selected, run
In future versions this problem will be resolved with an enhanced dialog to allow users to specify whether to create an instance and/or initialize it.[Read More
I've seen a lot of demo's in my time, and some of them look very flashy but miss a few of the set-up details and leave me wondering how to get started.
How many slides does a demo need to cover everything you need to know about installing IDS on Windows, CSDK, Open Admin Tool, IBM Database Add-ins for Visual Studio 2005, creating applications and web services, without missing a single detail?
How about 579?
Yes, Akmal B. Chaudhri
has done just that. In a six-part series he has put together the most relentless and painstakingly detailed set of IDS on Windows slides ever assembled. The 579 slides in fact only represent the first 4 parts, which have recently been posted to the IBM developerWorks On Demand Demo's
The first 4 parts are available to download as 15 to 17 MB PDF files:
- Part 1 - Learn how to install the Informix® Dynamic Server, the client SDK, and the IBM Visual Studio add-Ins
- part 2 - Learn how to install the OpenAdmin Tool. This demo shows you how to install an Apache HTTP Server, install and configure PHP, and install the OpenAdmin Tool
- part 3 - Learn how to create a simple SQL script to query a table in an Informix® demo database and then deploy that script as a SOAP and REST Web service
- part 4 - Learn how to use Informix Dynamic Server with Visual Studio 2005
What I like about this is that it doesn't leave anything to the imagination, if you follow this you won't have any questions. At all. It's all there. All of it.
I'm looking forward to parts 5 & 6. Here is what to expect (Update 1/15/08
these demos have now been added):
of this article looked at a standard case of the popular Could not initialize security subsystem
error which can occur when running command line IDS utilities on Windows.
Part 2 looks at a more obscure case of this error. Here's an email I received last week:
I installed a Cygwin environment and a telnet server on our Windows 64-bit machine.I can now access the machine and log-in as informix to a nice UNIX-like bash shell. However I would like to access the informix server from this shell. When I have defined INFORMIXDIR/INFORMIXSERVER etc. However I always end up with ERROR could not initialize security subsystem.
Since this is usually a problem accessing the Informix part of the registry, my first thought was that this had something to do with Cygwin being 32-bit and not being able to access the 64-bit registry keys under HKEY_LOCAL_MACHINE\Software\Informix
. With hindsight this couldn't be the problem, since it would be the 64-bit IDS utilities which access the registry keys, not Cygwin.
Strangely the problem only occurred when connecting via the telnet server. A Cygwin shell executed via Remote Desktop worked fine.
To investigate further, I used the Sysinternals
to monitor which registry keys were accessed when the onstat utility was executed via a telnet session. This showed one problem - the Informix environment variables were being set in a "DOS format" environment shell, which added an extra linefeed character at the end of the INFORMIXSERVER environment value. This showed up as a mysterious block at the end of the Registry access string in Regmon.
Once the environment variables were fixed, onstat
would still not run in the telnet session. It failed with:
GLS initialization failed, error -23101
This error is usually indicative of an incorrect DB_LOCALE, CLIENT_LOCALE, SERVER_LOCALE or INFORMIXDIR environment variable. In this case INFORMIXDIR was set as follows:
This was the problem. It was fine to use "/cygdrive/C/PROGRA~1/IBM/IBMINF~1/11.10/bin" in the PATH, but "/cygdrive" did not mean anything to onstat
which is unaware of the Cygwin environment. The correct setting for INFORMIXDIR was:
Once this was set, running IDS command line utilities via a Cygwin telnet session worked correctly.
A common user error when running command line IDS utilities on Windows is the "Could not initialize security subsystem" error. Below is an example of the kind of email I receive fairly frequently..
Any idea why I get this error msg? I've set INFORMIXSERVER in system environment.
c:\informix> set | find "INF"INFORMIXDIR=C:\informixINFORMIXSERVER=serv1_sec
c:\informix> onstat -ERROR: Could not initialize the security subsystem. Please ensure that this account has the necessary privileges and ensure INFORMIXSERVER value exists in the registry and environment.
How do I fix it ?
The "security subsystem" part of this message is misleading, in that it generally doesn't relate to anything about security from a user perspective. The key part of the message is nearly always "ensure INFORMIXSERVER value exists in the registry and environment
The way to troubleshoot this error is:
- echo %INFORMIXSERVER% - does it have the correct value? if not make sure you have run the %INFORMIXDIR%\%INFORMIXSERVER%.cmd script to set your environment correctly.
- Run regedit and check HKEY_LOCAL_MACHINE/SOFTWARE/Informix/Online/%INFORMIXSERVER% - does it exist? Does it have the Environment, Setup, Security subkeys? If not your IDS instance could be corrupted or installed with a different INFORMIXSERVER value to the one you were expecting. If you suspect corruption, try running the buildreg.exe utility which is part of the ntutils package downloadable from IIUG.
Part 2 of this article is here
A common gotcha for Informix users who are more familiar with IDS on UNIX than Windows is to try to start IDS by running the oninit
command directly from a Windows command shell. If you try this oninit will appear to hang around in foreground because it is not designed to be executed directly. Instead the oninit.exe
process is designed to be launched by the IDS Windows service when it is started. The historical reason for this is that processes on Windows do not support the UNIX style "fork and exit" architecture.
The supported way to start IDS on Windows is to start the IDS Windows service, which has the same name as your INFORMIXSERVER
value. See an earlier blog post for various ways to do this: Ways to start IDS on Windows
.A batch file to emulate UNIX oninit
Here is a batch file that will start IDS and exit, acting just like the UNIX oninit. If you put this somewhere in your path before %INFORMIXDIR%/bin
you can call it oninit.bat
and you're done. If you can't guarantee it will be before oninit.exe
in your path, you might have to settle for calling it something else, like onstart.bat
@echo offrem Windows batch file to mimic UNIX oninit usage
rem check for parameters which should display usageif %1test==--test goto callexeif %1test==-?test goto callexeif %1test==--helptest goto callexeif %1test==-helptest goto callexe
rem check for other parameters which should call oninit directlyif %1test==-dtest goto callexeif %1test==-Vtest goto callexe
rem start IDS%INFORMIXDIR%\bin\starts %INFORMIXSERVER% %*goto end
Note: Just like oninit on UNIX, this script assumes your environment variables PATH and INFORMIXSERVER are set correctly. However, since all this is doing is starting the IDS service, the rest of the Informix environment variables will be read from the Registry.
Now suppose you want an oninit.bat
file that you can put in %INFORMIXDIR%\bin and always work, regardless of the path? This is a little more complicated because an executable file of the same name as a batch in the same directory is executed by the operating system first. I do have this working, but it isn't pretty, and is certainly not supported. It involves renaming oninit.exe, and doing binary edits on onscpah.exe, oninit.exe, ontape.exe, onbar_d.exe, onmode.exe.
Suppose further that you wanted the executable oninit.exe
to behave just like it does on UNIX - to start IDS and exit, and read its environment variables from your command shell environment rather than the Registry just like UNIX? This can be done, and is something we're thinking about implementing in a future version. From an engineering perspective it isn't too much work. If you use IDS on Windows or in a multi-platform environment and think this is a worthwhile feature please let me know.[Read More
There used to be a time when a new developerWorks article about an Informix product was a rare event. In the last few months there seems to be a new article coming out nearly every week. This week's article is by Vimal Pradeep
and Malarvizhi Kaliyakrishnan
from the India CSDK Team
, and looks at some of the new Windows features in the 3.0 Client Software Development Kit
: Rapid Windows application development with IBM Informix Dynamic Server and IBM Database Add-ins for Visual Studio 2005
- Expanded capabilities for Informix .NET programming
The Visual Studio 2005 add-in supports Integrated installation, Server Explorer
integration, and "code-free" Windows application development using the new Informix .NET provider for .NET framework 2.0
has another useful Windows enhancement not covered by the article.. support for ESQL/C static linking
(which has been available on UNIX for a long time), meaning you can build and deploy ESQL/C applications without any need for for I-Connect to be installed. This opens up some new possibilities for embedding Informix applications and we have already started using this feature for some IDS utilities.[Read More
A closed beta for the Windows 64-bit port of IDS is scheduled to begin around mid-May. The 64-bit port has some performance advantages, including support for shared memory greater than 4GB. Here's an example onstat -g seg
from a pre-beta test instance showing >5GB shared memory. Note that SHMBASE
is now placed above 2GB (0x80000000).
D:\disks\ids\x64>onstat -g segUpdate 4/7/07:
IBM Informix Dynamic Server Version 11.10.F -- On-Line -- Up 00:10:52 -- 5586560 Kbytes
Segment Summary:id key addr size ovhd class blkused blkfree1381386241 1381386241 0000000080000000 1341784064 66480744 R 1376153 71381386242 1381386242 00000001CFFA0000 83886080 984624 V 4549 15931Total: - - 1425670144 - - 1380702 15938
(* segment locked in memory)
Note that this is a x86_64
(also known as AMD64) port. No IA64
version is currently planned.
If anyone is interested in participating in this beta please contact
the project manager Anita McKeithen