If you've recently installed Informix Dynamic Server (IDS) 10.00.UC4 and have ODBC or other client applications, you might notice an error message like this when connecting to IDS:

[Informix][Informix ODBC Driver] Database locale information mismatch

The problem is related to a an IDS bug fix in 10.00.xC4. The defect is:

171156 ABLE TO CONNECT TO DATABASE CREATED WITH UTF8 LOCALE WITH CLIENT WHEN DB_LOCALE SET TO EN_US.8859-1

Prior to this bug fix IDS would not complain if the DB_LOCALE environment variable was set to en_US.CP1252 on the client and set to EN_US.8859-1 or EN_US.819 on the database server. This is a mis-match which is now correctly flagged as an error.

The problem is the default DB_LOCALE value on Windows in the United States used to be set to en_US.CP1252, so if you didn't specify otherwise there would be a locale mismatch between the client and server by default. The correct fix to this problem is to set the default DB_LOCALE value on the client to the same as the default value on the server. You can specify this in the ODBC connection string or when creating the DSN.

With IBM Informix Client Software Development Kit (CSDK) version 2.90.TC6 and higher the default United States DB_LOCALE is now set correctly and matches the server value. The related defects are:

175110 ICE : THE DEFAULT DB_LOCALE IN CREATING DSN'S ON WINDOWS SHOULD BE EN_US.819

and

175746 ICE : WHEN SETTING UP DSN, SHOULD GET THE DB_LOCALE FROM SERVER AND SET IT AS DEFAULT DB_LOCALE ON ENVIRONMENT TAB

The latter fix makes it easier to set up a DSN without worrying about locales.

If you really need this working and cannot wait for a CSDK fix, and cannot change your application to specify a DB_LOCALE that matches the server in the connection string, you can set the IDS server environment variable IFMX_UNDOC_B168163 to 1 (ignore the fact that "168163" does not match any of the above defect numbers). The server will then revert to the old behavior of accepting the mismatched locales - however it is much better not to do this - mismatched locales, even when similar, can potentially lead to data corruption.[Read More]

Firstly, welcome to the Informix Application Development blog coming to you from rainy Beaverton, Oregon. I plan to use this blog mainly for Informix application development technical notes and tips, and anything else pertaining to Informix that crosses my mind.

I needed to set up a connection pool for a JSP application using Tomcat 5.5 and the Informix 3.0 JDBC driver recently and had a hard time finding any Informix specific instructions, so thought I might aswell start with that..

Since connection is an expensive part of a JDBC application it makes sense to maintain a connection pool, particularly for simple applications which connect/disconnect each time the page is viewed. Tomcat 5.5 comes with the Jakarta Commons Database Connection Pool implementation built-in so configuring a connection pool to work with any JDBC driver is fairly straightforward, and can be divided into 3 steps. In the following notes $CATALINA_HOME is assumed to be the path where you installed Tomcat, the application under webapps is called jspdemo, the INFORMIXSERVER is ol_myserver on mymachine:

1. Add a Context entry to conf/server.xml.

The Context entry goes in server.xml before the end of the Host definition </Host>. Add a Context entry for each connection URL required.

Read the Tomcat documentation for more information on the resource parameters such as maxActive and maxIdle.

2. Add a Resource reference to WEB-INF/web.xml.

If the application directory is jspdemo, the web.xml file will be:$CATALINA_HOME/webapps/jspdemo/WEB-INF/web.xml - If you don't have one a Tomcat tutorial should guide you through creating a basic one. Before the </web-app> tag add the following:

The first Informix Developer Edition virtual appliance is now available to download from IBM.

Update 12/2/08: The virtual appliance has been improved and upgraded since this article was written. Check here for updates.

We see a lot of interest in running IDS on virtual machines, and for the first time a self-contained pre-configured virtual machine image containing IDS 11.50 Developer Edition can be downloaded for free.

This appliance has many potential uses. It is a self-contained development environment containing Data Studio and various API's. It contains getting started guides for Informix programming. It can be used as a base environment for creating a training class. If you can reproduce problems in this environment you can be sure tech support have the same environment (though since this is a Developer Edition, there is no explicit support for this edition of the virtual appliance - it is for development, education and non-profit use). It has great potential for ISVs developing their own applications for re-sale in a self-contained virtual machine. Look for future announcements on editions of the appliance containing Enterprise and Workgroup editions of IDS. Put your own application on and drop it in a compute cloud for remote access.

Basics

The virtual machine contains a 32-bit SLES 10 SP2 operating system and the following software versions installed:

To run the VM image you need VMWare Player or Workstation installed on your machine. It also works with VMWare Fusion on MAC OS X, and VMWare Server. You need at least 1GB memory on your machine, 2GB will run much better. Up to 12GB free disk space is a good idea too.

Installation

This version of the appliance is available for download as a self-extracting executable. To use on non-Windows platforms, rename the .exe as .rar and use an unrar utility to uncompress it.

Once it's uncompressed you can see more detailed documentation under the doc subdirectory. If VMWare is installed double click on the .vmx file. After starting the image you login as root with password root (remember to change this password later, this version does not force a change).

There is one language screen to accept, and then a series of license agreements to acknowledge. These are for the products installed on the appliance.

Once the desktop starts, log in as user: "developer", password: "developer". The first thing you will see is a browser pop-up with a window showing the documentation. The browser tool bar has some handy links pre-configured.

Note that the networking is pre-configured, you should be able to connect to the outside world and communicate between your host machine and the virtual appliance, including shared directories on your local machine.

The Desktop

The default desktop has some useful quick access icons, like a terminal window with an IDS environment set up, a dbaccess window, a first steps folder containing some programming and self-help tutorials, an OpenAdmin Tool window, a link to IBM Data Studio. The best way to get to know the appliance at this point is to play around with it. There are also some useful scripts in the $INFORMIDIR/bin directory to set up a cluster/MACH11 demo (hint, su to informix, password informix to run these scripts).

Note that when you run the Open Admin Tool, after connecting to the demo server (no default password) you'll need to download and install the Adobe Flash Plug-in for the Firefox browser. Later versions of the virtual appliance may have the license agreement in place to make this step unnecessary. I found automatic install of the plug-in didn't work so I have to download the file, unzip it and run it before I could use OAT.

The following JSP code shows an example of using FileUpload to read this stream into a form that can be inserted into an IDS BYTE column. All this sparsely commented code does is get the uploaded file as a FileInputStream object and then use the JDBC SetBinaryStream() method to bind it to the SQL insert statement...

Update 2/22/07: This example has been updated to use ServletFileUpload and DiskFileItemFactory (see lines in bold) instead of DiskFileUpload which was being used before thanks to a comment from Stephen Brand who pointed out that DiskFileUpload is now deprecated due to a memory leak. Thanks Stephen.

Initially the self-extracting executable versions are there (which extract to VMWare machine images) expect to see .tgz files there too shortly.

When you look at the download site note that as well as the regular 32 and 64 bit VMWare Workstation versions, for the first time there is a VMWare ESX version. Make sure you pick the right edition to download. If you're using VMWare Player, Workstation, Server or pFusion download the VMWare Workstation version.

A lot of development work has taken place since the last IDS virtual appliance was posted.. here is a quick summary of new features, listed by the virtual appliance version (the current being 1.9):

* Changed ONCONFIG files for all demo instances * Updated all clusterDemo PHP examples: change hostname from suse1 to ids1150srvr* Updated the informix startup script: create the demo_on instance only on the first boot; do not re-create it on any subsequent boot * Updated the apache startup script: fix a defect that caused all clusterDemo PHP examples to fail to connect to any instance on the 64-bit IDS VA * Changed ONCONFIG STACKSIZE parameter for all demo instances to 128 * Installed Data Studio 2.1

As the IDS virtual appliance matures it is good to see it becoming a standard platform for demo's and a base for educational classes. Now a VMWare ESX hypervisor version is also available it is now easier to put the appliance into a data server environment and start using it.
[Read More]

It's good to see this news, there are many Debian and Ubuntu users on c.d.i. I like to use a Debian filesystem with CoLinux on my laptop, and this makes Informix support smoother. I haven't used Ubuntu so much, but have some familiarity with the Edubuntu distribution. I'll be more tempted to replace Windows with Edubuntu on old PC's now. I did this on an old pc I donated to a kindergarten not long ago and by all accounts it's the most popular pc in the class.

If you feel like you're drowning in work, consider writing a to-do list. It can be more fun than actually doing the work, and provides for an ephemeral moment of satisfaction when you check something off. Personally I'd have trouble getting out of bed without a to do list.

A minimal to-do list application

My design goals for the minimal to-do list are:

Small enough to include as an <IFRAME> window on my home page

Dynamic AJAX style user interface

Form over function - no bells or whistles

An item should disappear from the list but remain in the database when thecheck box is clicked. The list box is simply a view of unfinished items.

I chose to write this with the ZK framework as it enables me to define the graphical components I need with a concise markup language and then implement the relationships between them using Java.

The SQL for the todo_list database consists of a single table called tdl:

-- add the first to do iteminsert into tdl values(0, "Write to do list app", '1', today, null);

The ZUML code below which I placed in $TOMCAT_HOME/webapps/todo/index.zul uses a Tomcat dbcp connection pool to manage the connection to the database. This is more out of habit than for any particular performance need. The connection pool code has been set to red and can be replaced with a direct JDBC connection if required (see ZK - AJAX without the JavaScript for a direct connection example).

Note that if embedded Java code is enclosed in a <![CDATA[ ... ]]> tag then HTML characters like '<' do not need to be escaped.

The code has two main graphical components: A listbox containing the list of to-do items with checkboxes, and a groupbox containing text boxes with a button to add a new item.

The ItemRender class is to support manipulating a listbox with multiple columns and is inspired by a ZK forums example by Henri Chen.

Four Java methods are defined, retrieveItems() to display the list, markDone() to remove an item from the view, addItem() to add a new to-do item, and doSQL() to send SQL update statements to the data server for markDone() and addItem().

Last week a new tool known as the Informix Lightweight Installer was uploaded to the IIUG software repository. In a nutshell it is designed to help with embedding IDS on Windows platforms by allowing a pre-configured IDS instance to be deployed via a simple command line interface. This was written primarily for ISVs who deploy IDS as part of their application and require customized configuration settings beyond those available via the silent installer, or who need to deploy an IDS instance with pre-loaded dbspaces and data. This kind of configuration can be fiddly, particularly on Windows; the goal of this tool is to take the hard work away.

For a better explanation here are a couple of paragraphs from the readme:

The lightweight installer (lwt_install) is a free tool designed to support embedding IBM Informix Dynamic Server (IDS) on Windows platforms. It can be used as a deployment tool to redeploy pre-configured IDS instances (INFORMIXDIRand optional data spaces). Similar to the IDS installer, the lightweight installer supports certain customizations during deployment - the key difference is that the lightweight installer is designed to deploy pre-configured instances rather than set them up from scratch at install time.It can also serve as a data server instance manager (for example to clone and create new instances on the same machine).

The lightweight installer is a command line utility designed to be calledprogrammatically or from a script as part of an application installation, and therefore supports completely silent IDS deployment. To allow better control of deployed instances and post-deployment ease-of-use, the lightweight installer takes a number of parameters from the command line. Editing the onconfig file gives the most granularity in configuring an IDS instance. Inessence, lwt_install is a lightweight alternative to the IDS silent installation mechanism for deployment.

If you give it a try please provide feedback to Tosin and myself. What would you like it to do? What does your ideal deployment tool do? We'd like to see the functionality of this tool enhanced and coverage extended to other platforms.[Read More]

Hope everyone has had a couple of good weeks, I've been on vacation for most of it. Family reunions can be a lot of work let me tell you.

So one of the customers I support made an interesting feature request lately and I was interested in your feedback. As an application developer this particular customer feels he doesn't have enough tools at his disposal to know what the session was doing with the memory it is consuming. So his feature request was asking for a Session Memory profiler. Basically so he could know how much of memory is being used for temporary tables, how much is save by cursors, etc.

So my question to you all, is how valuable would you find a tool like this?

A compressed tar file is also due to be uploaded in the next day or so. Non-Windows users who would like to avoid the self-extracting executable and can't wait for the compressed tar file can rename the .exe file as a .rar file and use an unrar utility to extract it.

Thanks to "patrick", "hatrick" and "rougail" for alerting me to problem with the tar file last week (unfortunately Thanksgiving got in the way of getting it fixed).

New features and updates since 1.0

There have been many incremental improvements to the virtual appliance since version 1.0. Here is a list of some of the changes...

Display an image from a database by generating an AImage object from a binary stream

The application created in part 1 was a demo of implementing these two methods, but did not do anything usable. In Part 2 I will use these methods to create to create a working BREAD (browse, read, edit, add, delete) application for a database table containing an image file and informational columns.

1. PreliminariesThis article builds on part 1, and assumes a working ZK environment with database connectivity via JDBC, and a new or existing ZK application.

2. The species databaseFor this example I am choosing to store the photo column in a separate blobspace. This is a design choice at the Informix data server level and makes no difference to how the application works (it just reduces I/O to the physical log). On my Windows laptop the commands I used to create a 100Mb blobspace called blobspace were:

3. Define the presentation layerIn previous ZK examples I have inter-mingled ZUML markup tags which define the presentation with the ZSCRIPT Java code which defines the service methods. This is ok for small examples but starts to look messy for larger applications. This time the ZSCRIPT code is stored in a separate file: part2.jul for clarity. Note the file can have any name and extension, I just made up ".jul" to remind me that this is Java code sourced from a ".zul" file.

The GUI part of this application consists of a listbox on the left side of the screen. On the right side of the screen is an image and detail grid, with a panel of buttons separated by a splitter. This is my index.zul file:

Note one deviation from the default display characteristics.. I redefined the listbox element slightly using a STYLE tag to make the border between rows stand out more.

Note also there is one line of embedded zscript code at the end, to call the method to retrieve the records at startup, and pass on the name parameter if it has been optionally included in the URL (e.g. http://localhost:8080/imgdb2/?name=Hairy%20Woodpecker).

4. Define the service methodsThis is the Java code to populate the listbox and implement functionality behind the buttons. The listbox is dynamically generated by implementing the ListitemRenderer class. Note that the listbox is populated using the retrieveRecords() method and is set to use the SimpleListModel.

The displayRec() method is called when a row in the listbox is clicked on and uses the same approach as in part 1 to select the image object from the database and display. In part 1 if the image was too large it would overflow the window it was defined in. Here the image is set to a fixed width of 500 pixels and the height is dynamically set to maintain the aspect ratio; this way the application maintains its overall proportions and the images are displayed correctly.

The file upload is implemented in a separate method called doFileGet() called when the New photo button is pressed. A boolean variable newImage is set when an image has been uploaded.

This allows the addRec() method to support adding a record with or without an image, and query the user to make sure they wanted to add a record if no new image is present.

Similarly the modifyRec() method can modify fields in the table without changing the image if the user did not upload a new image before pressing the Modify button.

Now the application is starting to become useful, particularly for a small database; but suppose there were thousands of records - dumping them into a simple listbox is not going to work so well, the application would need to display records pages at a time. The following features would also be nice to have:

Sorting by other columns such as Genus and Species if the user clicks on those column headings

Searching for records

Handling SQL errors

In part 3, when I get around to writing it, I'll look at adding some of these features. If you have any suggestions for part 3, or ways to improve the existing code please let me know.[Read More]

This is part 1 of what will ultimately be a 3 part article describing an AJAX-based front end to an image database written in ZK - an event-driven component-based development framework. ZK can work well for GUI web applications as it provides a simple markup language to define the user interface and takes care of the AJAX synchronization behind the scenes.

Part 1 - Uploading and downloading images to a database

Part 1 concentrates on the methods used for uploading to and downloading images from a database. It is a self-contained mini-application to display/add/delete images in a database, but lacks various features that would make it useful, such as storing contextual information, browsing/searching for records and rigorous error handling. It also makes an assumption that the images used are not much more than 500 pixels wide.

1. PreliminariesA ZK database application has the following dependencies (if you have ZK installed and you know how to get a database connection you can skip this part):

Optional: Set up a database connection pool - I usually set up a connection pool for any database application (Informix instructions here) though you could just as well connect directly with a JDBC connection URL in the application and skip this step.

Note: If you use an Informix JDBC driver with "large object" data types it is advisable to set LOBCACHE in the connection URL (whether pooled or not) to a sufficiently high value to avoid temporary files being used by the JDBC driver

3. Create a new ZK ApplicationCreate a new application directory, say "imgdb1", (under $TOMCAT_HOME/webapps if using Tomcat), and edit the WEB-INF/web.xml file to add ZK support. The ZK Quick Start Guide (PDF) section 5 describes how to do this.

4. Write the Presentation LayerOne of ZK's strengths is the ease of writing a user interface with the ZUML markup language. Note: the <ZK> tag shown here is closed in step 5. In my example, the code in steps 4 and 5 is written to a file called index.zul (which the server will recognize as a default file like index.html). A window containing the image and Display/Add/Delete buttons can be succinctly defined in ZUML as follows:

5. Write the Database Service MethodsThe code to service the function buttons is implemented in Java and placed within <ZSCRIPT></ZSCRIPT> tags (it could also be placed in a separate file if required). (Note the ZSCRIPT tag can also specify other languages such as Javascript, Groovy and Ruby.)

The displayImage() method selects the named image from the database, retrieves it from the ResultSet as an InputStream object which can then be set to the image defined in the window via an AImage object.

The uploadImage() method calls FileUpload.get()to upload an image from the local filesystem to the database. If the file is confirmed to be an image it is retrieved as a byte array and bound to a prepared INSERT statement.

// set up data source - replace this if you are not using a connection poolContext initContext = new InitialContext();Context envContext = (Context) initContext.lookup("java:/comp/env");DataSource ds = (DataSource) envContext.lookup("jdbc/imgdb1");

In this example the Connection conn = ds.getConnection(); statement gets a JDBC connection from a connection pool. Replace this (and the Context and DataSource declarations) with a direct DriverManager.getConnection(url) call and associated initialization code if you prefer to make a direct connection.

Now, assuming the data server is online, pointing the browser to the application URL (in my case http://localhost:8080/imgdb1/) should display the application.

Part 2 will add basic browsing, update, delete, and a incorporate a few informational fields to the database application. Comments are welcome, particularly suggestions on improving the code.[Read More]

Suppose you have some server code which needs to check whether a user has read or write access to a file...

A UNIX programmer might say: "Use stat() to get the file permissions and check them against the user and group id. I'm going to lunch. Don't wait up".

A Windows programmer on the other hand had better skip lunch and start coding.

Here are four possible ways to check whether a user has the requested access to a file on Windows. The first three use GetFileSecurity() to get a file security descriptor and varying methods toobtain the user's security credentials.

1. Use LogonUser to get a Token handle, and validate with AccessCheck()If you have a Token representing a logged on user you can call the AccessCheck() functionto validate the user access rights against a file security descriptor. If your server code has the user's password and other credentials (not defined in the example code), you could get the Tokenusing LogonUser() (error checking removed for brevity). Assuming the desired access is encoded in the flags variable:

I have found this to be the most reliable method of checking a user's file access rights, with thedisadvantage that your server needs to have the user logon details.

2. Use OpenProcessToken() to get a Token handle and validate with AccessCheck()If you have the process ID, pid, of the user's front-end process you can avoid logging on by getting a handle to the token using OpenProcessToken() as follows (the rest of the code would be the same):

// get the Token associated with the processOpenProcessToken(hProcess, TOKEN_QUERY, &hToken);CloseHandle(hProcess);

One problem I've experienced with this method is that OpenProcessToken() can fail with Access Denied on some machines and not others. I have yet to identify the root cause.

3. Use GetEffectiveRightsFromAcl() with a user SIDOne way to verify a user's access rights without a token is to get hold of the user SID using LookupAccountName() and call GetEffectiveRightsFromAcl(). Once the file security descriptor has beenobtained as above the rest of the code would do this:

A potential problem with this is that LookupAccountName() can take a long time to execute if you have a remote user from a trusted domain in a network infrastructure with many domains.

Another problem I've seen with this is GetEffectiveRightsFromAcl() failing with return code 5. I have an open support call with Microsoft concerning this problem.

Update 2/13/07: Thanks to some help from a Microsoft Escalation Engineer the specific problem has been identified as when any local user (i.e. not a domain user) calls GetEffectiveRightsFromAcl() and passes it the ACL of an unprivileged local user, the file ACLs include those for groups which contain domain groups, and at a domain level the Network access: Allow anonymous SID/Name translation setting is disabled (default setting) the function will return "Access Denied". Because of this reason using GetEffectiveRightsFromAcl() is not the recommended method to determine whether a user has access rights to a file.

4. Launch a process as the user and test accessIf you don't want to mess with all the access functions, you could could simply create a process as the user using LogonUser() and CreateProcessAsUser()and try opening a file with the required permissions. This isn't a very efficient method, and executing a command leaves your code open to malicious command injection, but it works.

ConclusionThe file access rights implementation on Windows, and its programming interface, is in my opinion a pile of pants. It probably seemed like a good idea at the time to create an access model with so much flexibility, but a flexible security system is often a misconfigured security system. Suggestionswith simpler alternatives to the above are welcome.

The term DLL hell is usually invoked with reference to conflicts between DLL versions, missing DLLs and multiple copies of DLLs. In the 14th century the poet Dante portrayed metaphysical hell as having multiple layers or circles, and in my opinion the analogy readily extends to DLL hell.

A process running on 32-bit Windows has 2GB of address space by default. Into this space it needs to fit any operating system and application DLLs it loads, as well as any shared memory segments it attaches to. A DLL can have a default load address set at link time, and the operating system DLLs are usually set to load in the top 256 Mb of process address space, above 0x70000000. Incidently, a great tool to view DLL load addresses and process address space on Windows is Process Explorer from sysinternals.com.

Applications which attach to IDS shared memory segments, such as oninit, onstat, onbar need a contiguous free block of address space as large as the segment they are attaching to. So if onstat connects to the Resident segment and onstat -g seg shows it to be 1GB in size (due to the number of buffers configured for example), the onstat address space will need a 1GB contiguous gap where no DLLs are loaded. The first place it will try and attach the resident segment is the value of the onconfig parameter SHMBASE which is where oninit attaches it. The default SHMBASE value on Windows is 0xC000000.

The problem starts when when a DLL has a base address somewhere in the middle of the process address space. This fragments the address space and reduces the maximum size of shared memory segment that could be attached. If base address is not set at link time, DLLs have a default address of 0x10000000. A DLL loaded there would certainly cause a problem as it's only 64 Mb higher than default SHMBASE. If a process loads multiple DLLs which have a default load address of 0x10000000, one will be loaded there and the rest will be dynamically rebased to wherever the OS sees fit.

There are currently two defects for XBSA DLLs loaded by onbar which are set to the default load address and hence onbar returns errors in larger IDS shared memory configurations:

CA Storage Manager XBSA DLLs also have this problem - in the past we've had to rebase their DLLs to make them play nicely with onbar.

These defects are currently open, though Technical Support can work around the problem for you by rebasing the DLLs manually using the Windows Platform SDK rebase tool.

What can be more frustrating is when an operating system DLL has a load address outside of the recommended system DLL range of 0x70000000 to 0x7FFFFFFF. Windows currently has several bad DLLs which can cause problems for IDS:

If you are experiencing problems with onbar or other IDS utilities on Windows which go away when the number of buffers is reduced you may be in this particular circle of DLL hell. Depending on the problem the solution could be to request a patch from Microsoft, or seek help rebasing XBSA DLLs from tech support. Now would be a good time to familiarize yourself with Process Explorer to assist with the troubleshooting. A good way to determine the base address of a DLL is to use the Windows Platform SDK utility dumpbin.exe. E.g. to see the base address of xpsp2res.dll type:

dumpbin /headers %windir%\system32\xpsp2res.dll | find "image base"

Some additional process address space can be opened up by setting the /3GB boot.ini switch - this will provide an extra 1GB of address space above 0x80000000 for any process which is built with the IMAGE_FILE_LARGE_ADDRESS_AWARE in the process header (and IDS binaries are built with this).

One glimmer of light on the horizon is that when x86_64 IDS is available for for Windows 64-bit, this problem should largely be a thing of the past. Shared memory segments larger than 2GB will be available, and we can start ascending the terraces of DLL Purgatory - ok I probably took the analogy too far that time.

Before anyone asks when the x86_64 Windows port of IDS will be ready, that has not been finalized yet; all I can say is that it is in progress.[Read More]

The Q2 numbers are in and Informix Dynamic Server experienced another large increase in revenue to build on the growth of Q1. As usual the details are not released publicly but I am officially allowed to say, and I quote..

Informix Dynamic Server Role Separation can be important for data server installations where clearly defined security roles exist. This post describes how to disable Role Separation on Windows if you decide you don't need it after all, and how to partly enable it - maybe you no longer wish to maintain separate users and groups for specific DBA tasks, or maybe you don't want to add valid users to the ix_users group before they can connect to the database..

You cannot turn off role separation once you have enabled it. To remove role separation,you must uninstall the database server and reinstall it without role separation.

This is for a good reason - to disable role separation without reinstalling involves editing the registry, and if that goes wrong it is back to reinstalling. It is better to follow the policy that if a task requires direct edits to the registry it is not supported.

With suitable disclaimers in place here's how Role Separation can be disabled on Windows without reinstalling IDS. The required edits are presented in the form of a regini script. In order to use you would need to modify it to set "ol_myserver" to your INFORMIXSERVER value. If anyone knows how to specify an environment variable as a registry key in a regini script please let me know..

; Important:; Read the comments and warnings in this script - ; 1. Understand what it does before attempting to use it; 2. Backup your HKEY_LOCAL_MACHINE\Software\Informix registry key before use

; First switch off Role Separation in the DBMS key so uninstall doesn't look for it:;; Warning - If you have multiple instances installed change "Setup" and "Security" below; to the value corresponding to your instance, e.g. "Setup1", ""Security1" etc;; Warning - If your IDS version is not 10.00 edit the version in these keys:;HKEY_LOCAL_MACHINE\Software\Informix\DBMS\10.00\Setup Role Separation = REG_DWORD 0x00000000 AAO User = DELETE DBSSO User = DELETEHKEY_LOCAL_MACHINE\Software\Informix\DBMS\10.00\Security\IXAAO Group Name = REG_SZ Informix-AdminHKEY_LOCAL_MACHINE\Software\Informix\DBMS\10.00\Security\IXDBSSO Group Name = REG_SZ Informix-AdminHKEY_LOCAL_MACHINE\Software\Informix\DBMS\10.00\Security\IXUSERS Group Name = REG_SZ *

; Next set the Security groups to their default non-separated values;; Important - change "ol_myserver" to the value of your INFORMIXSERVER;; Warning - If your default IXDBSA group is not called Informix-Admin; edit the following lines:HKEY_LOCAL_MACHINE\Software\Informix\Online\ol_myserver\Security\IXAAO Group Name = REG_SZ Informix-AdminHKEY_LOCAL_MACHINE\Software\Informix\Online\ol_myserver\Security\IXDBSSO Group Name = REG_SZ Informix-AdminHKEY_LOCAL_MACHINE\Software\Informix\Online\ol_myserver\Security\IXUSERS Group Name = REG_SZ *

Once a customized version of this script is run, check the changes were made correctly, and then manually delete the ix_aao and ix_dbsso Security groups that were created at install time. When IDS restarts it should be back to its default un-role separated state.

What this registry structure implies is the possibility of having a partial role separation implementation. For example, suppose you don't want separate DBA roles, but do want to improve security by only allowing members of an ix_users group to access the data server. You could implement this by creating an operating system group for your users, and then setting the

The Informix Summer roadshow has begun and here is a repro of the event calender from IIUG. Note I added a link to pictures from the Zagreb roadshow (thanks Hrvoje). If you attend or run one of these events and have some photos to share please let me know.

Take advantage of these Informix events coming to cities near you!Informix Roadshow

The Informix Dynamic Server roadshow is traveling around the world, providing a 2-day deep-dive, hands-on opportunity to try out the latest Informix technology. Gain fresh, innovative ideas to optimize your business performance and create competitive advantage.

Does your local user group need new ideas for your meetings? IBM and the IIUG have teamed up to create Tech Day content that includes a suggested agenda, presentation materials, demos and speakers who can be available for your user group meeting. Topics include the Informix Roadmap, Continuous Availability (MACH 11), Informix Warehouse, Compression, and other topics that can be customized for your group. This can also be used as an opportunity to reach out to universities in your area by adding an Academic Initiative Information Session.

Contact Cindy Lichtenauer (cindy@iiug.org) or Pradeep Kutty (pkutty@us.ibm.com) to get a Tech Day organized for your local user group.

Business Partner Training

The Informix Bootcamps are 3-day in-depth technical workshops for IBM Business Partners that focus on IDS 11.5. Detailed presentations and hands-on labs are included where attendees will gain in-depth knowledge of exciting new features and areas including:

Continuous Availability

Informix Warehouse

Security features including label-based access control (LBAC)

OpenAdmin Tool

Administration and performance tuning

... and more!

Business Partners with applications that currently run on IDS or who are new to IDS can benefit from this workshop by learning how IDS can add value to your solutions and extend your market opportunities. Business consultants who are currently working with or planning to work with IDS for their customers are also welcome to attend.

The latest schedule of bootcamps can be found at http://www.iiug.org/url/2009_bootcamps.html.

A new sub-capacity pricing plan was announced in February that makes it more affordable to run IDS in virtualized environments.

All editions of IDS are now available and supported in a virtualized environment. Sub-capacity pricing is now available to all IDS V11.50 editions and corresponding components, helping you reduce costs and maximize your investments with server consolidation and reduced administration. IBM is responding to your tremendous interests in high availability and business continuity. With IDS V11.50, you will be able to deploy High-availability Data Replication (HDR) with no additional feature charge for the Workgroup Edition, deploying up to two secondary servers in either Idle standby or Hot active read mode. Hot active secondary servers are now eligible for sub-capacity pricing on the Processor Value Unit metric.

To cut a long story short, it means you can deploy IDS in virtualized environments without having to purchase licenses for the entire server. You can purchase Processor Value Units (PVU) up to the number of cores needed within a socket or a server. For example, if you are running IDS in a virtual machine that has a single CPU core allocated you'd purchase an appropriate IDS edition (say, Express) and 50 PVU's. If the virtual machine instance had 10 CPU cores allocated you might purchase Enterprise Edition and 500 PVU's.

Waiting at McCarran airport in a contemplative frame of mind for a flight back to Portland afforded some time to reflect on the recently completed IOD 2008 conference..

Sadly I did not get to attend as many talks or keynotes as I would have liked to this week, having had multifarious activities to work on or prepare for every day, but the main themes of the conference for me were...

Virtualization and Virtual Worlds

We announced the IDS 11.50 Developer Edition virtual appliancelast week and are seeing a lot of interest in it. Informix virtual appliances were present at various places in the conference Expo hall. I was manning the Intel booth where we were showing IDS and DB2 SLES 10 SP2 virtual appliances running under the VMWare ESxi hypervisor layer which comes optionally pre-installed on IBM Blade machines.

At the VMWare booth the first 100 people to fill in a survey were given cool looking 4GB USB drives containing the IDS and DB2 appliances. After that they were handing out DVD's.

Meanwhile at the Canonicalbooth they were demoing an Ubuntu 8.04 LTS (Hardy Heron) version of the IDS virtualappliance. Those Canonical guys are fun to work with, and Ubuntu is hugely popular because, simply put, it's easy to use and itperforms well. Stand by for more newsabout Canonical and Informix in the near future.

Among the conference technical sessions we had an intro to the virtual appliance, and ahands on lab which provided an opportunity to play around and do some programming in the Data Studio environment that comes pre-installed on the appliance. On Wednesday eveningthere was a Birds of a Feather session where some interesting feedback was provided on what people thought of the initial virtual appliance developer edition, and what they would like to see as IBM extends its virtualization strategy for Informix. One thing thatwas great to hear in this session was the favorable response from people who have tried itso far. It works, it's easy to use.

It was interesting to learn how people intend to usethe current version of the VA. Someone from a "very large retail chain" mentioned that many of their vendors supply solutions in the form of self-contained virtual appliances these days, andit will be useful to him to give the IDS appliance to any of these vendors who claim theydon't do Informix and need a starting point for Informix application development.

Another use for the virtual appliance that is gaining traction is as a core part of the Informix academicinitiative. The components required to make IDS an excellent educational platformhave fallen into place in recent times. The first was the release of the free IDS Developer Editionin IDS 11. Now everyone had access to a free IDS edition with all features enabled.Now with a virtual appliance that contains the Informix development stack, pre-configured,in one place, along with getting started tutorials, it makes for a self-contained classroom and laboratory just waiting to have a database administration and programmingcurriculum developed around it. Here's another idea - when the Ubuntu IDS virtual applianceis available, install the Edubuntu package on it - then you have a state of the art educational aid for a range of age groups that also teaches database programming.

At the bleeding edge of Informix research Lance Feagan is doing some cool things with IDS and Virtual Worlds. Lance had a couple of very interesting presentations and demo's in this area which I'd like to post more about. In the meantime take a look at this recent IBM Database Magazine article Informix Dynamic Server bridges virtual and real worlds to get the idea.

WindowsI had an IDS on Windows Deep Dive presentation scheduled for the final 11:30 to 12:30 sloton the last day and was not especially expecting anyone to show up. Lucky for me 7 determined people turned out to see 56 slides of non-stop Windows - a mixture of IDS on Windows architecture, recent Windows specific features, notes on embedding IDS on Windows plus some performance and troubleshooting tips. That reminds me, I like the new name for Windows 7, Windows 7. Inspiring.

Gambling

I have been known to fritter away as much as $10 when Ivisit Las Vegas. On Thursday evening I happened past a group of Informix slot machine junkies (Erik, Howard and Madison) and decided to throw caution to the wind and engage in a bout of reckless gambling. At $4 in it was not looking good, then I hit the jackpot and won $7. That was enough for me, I cashed out with a healthy profit. That's right, for a good time in Las Vegas don't hang out with me.

PartiesThere were some fun parties at IOD (I hope there are no photos from the Halloween party). HP and Intel showed their renewed enthusiasm for Informix by sponsoring an IIUG reception. Check out Spokey's Informix Zone blog where he has kept track of who has posted photos.

Jacques Roy somehow managed to report on every day of the conference in his: Informix and Computing blog. If you are more of the visually stimulated type,turn to roving photographer and Frenchman Jean-George Perrin who has amassed a large collection of conference images on his Facebook site.[Read More]

The IOD conference has started, with Customer Advisory Council meetings on Saturday, Business Development Day on Sunday, and a welcome reception last night with free flowing food and drink. It wouldn't be a conference without mercurial Frenchman Jean-Georges Perrin taking photos..

Don't mess with the International Informix User Group

See more of his pictures on Facebook. I'm already starting to wonder if it was wise to get a permanent Informix tattoo.. ah well, it's Vegas.[Read More]

Sitting on a flight to Las Vegas for the IOD conference affords an oportunity to tear myselfaway from the laptop and turn my attention to Carlton Doe's new book: Administering Informix Dynamic Server - Building the Foundation.

I should start by admitting a bias. I like Carlton, and from before Iknew him I've liked his writing; he writes not only with energy and passion for the subject, but with a great deal of technicalknowledge and experience. What this means is that you get all the information you would expect, but also something more than just adry technical book. So, needless to say, I was looking foward to a chance to read this book.

Is there a need for an Informix book when there is a comprehensive set of high quality Informix documentation available online?

The documentation is great but there is a huge amount of it, and zeroing in on exactly what you need can take time. Carlton addresses this question in the introduction:

In this book, I try to take the dry technical details of the documentationand put them into the context of daily life. I cover topics in what I thinkis their logical order of occurrence when working with a database environment. First, you design the environment; then you build andpopulate it. You create backups on a regular basis and monitor and tune asnecessary. There are other responsibilities and functions, but these are the most important. I use this approach to build the subjectsdiscussed in each chapter.

One thing this book does very well is provide current information. A greatdeal of new functionality has been added to IDS in the last year, andknowing how much of a lead time publishing deadlines impose I am impressed by the amount of up to date 11.50 feature descriptions thebook has. It can be stressful trying to write about a feature beforerelease while the developers change it as you watch (OpenAdmin Tool which keeps getting new features is a good example).Somehow Carlton has managed to stay current, and write with an inside knowledge ofwhich features are likely to change.

I'm glad to see a few in-jokes to keep us paying attention. In a section entitledProblem solving with Extensibility a fictitious org chart is introduced,where Mukta, Fred, Kevin and Kassa report to someone called Jerry. That soundsstrangely familiar, though I can't quite place it.

At 424 pages Administering Informix Dynamic Server is small enough tocarry around, yet comprehensive enough to serve as a single referencesource. It also manages to provide a balance between introductory material for new Informix users and advanced technical information forInformix power users. After flicking through the backup and restore chapter I find myself drawn into a few diagrams and now know enough about XBSA architecture to be dangerous.

Overall, an excellent reference that both new and experienced Informix DBA's will find useful to have around.

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, #2) that proved very useful in identifying compatibility problems early on and testing performance improvements.

The LabThe 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 CompatibilityI 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.

Logistical SupportI 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

ConclusionAs 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]

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.

Friday was my last day in Tech Support and today I take up a new position in Development as IDS architect for install, common libraries and Windows. Having spent most of my career in tech support, there is plenty about the old job I'll miss. I'll subjectively state that Informix tech support is a great environment to work in. Unlike many tech support organizations Informix support engineers have equal status with their development counterparts, and have opportunities to work with source code, fix bugs and develop product features. The customer perspective that support engineers gain is valued by development and tech support sign-off is required during the review process for new features.

In the new role I am interested in any feedback and suggestions you might have regarding the IDS installation process (on any platform) - does it meet your needs? And if you use or plan to use IDS on Windows, anything you would like to see different or Windows features you would like to see better integration with? Let me know.[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).

Ever wondered how DB2 and Informix Dynamic Server architectures compare? Which major features they have in common and what separates them? What are the major editions and platform support between the two? These questions and more are answered in a new developerWorks article by Suma C Shastry, Mohan Kumar, Prasad Srinivasachar entitled How to go hand-in-hand with DB2 and Informix.

It looks like this article has been well-researched. Particularly interesting to me are the architecture diagrams, which include Architecture overview, Process Model, Memory model, Instance Architecture, Backup mechanisms, Security architecture, administration tools.[Read More]

One of our kernel performance engineers installed this IDS 10.00.FC1 for Power 5 (ppc64) instance directly on a PS3 to see what would happen, and it works just fine.

A nice project for a rainy day might be a PS3 specific IDS port to take advantage of the Linux programming model. Too bad the PS3 only has 256Mb RAM - but for applications with small data sets and large CPU requirements...[Read More]

There isn't much to starting IDS on UNIX - set your environment (INFORMIXSERVER, INFORMIXDIR, ONCONFIG, PATH) and run oninit as user informix or root.

Making IDS start automatically when the machine is started can be a little more challenging as you need to edit the /etc/rc.d files to set the environment and launch oninit.

On Windows IDS is designed to run as a Windows service and there are more ways to start it. At least making IDS start automatically is easier, just locate the IDS service in Control Panel->Administrative Tools->Services and modify the Properties to set Startup Type to Automatic. Another good thing is that for most startup methods, there is no need to set the environment.

Here's a look at the methods of manually starting IDS on Windows and their relative merits:

Control Panel->Administrative Tools->ServicesThe GUI method - fine for starting manually with GUI access to the machine.

%INFORMIXDIR%\bin\starts %INFORMIXSERVER%Does what net start does but allows oninit command line arguments. For example to bring an IDS instance to quiscent mode:starts %INFORMIXSERVER% -s

Run oninit from the command line.The oninit.exe process can be launched in foreground by setting the IDS environment and running oninit directly. Unlike on UNIX where it will fork and return you to the command prompt, it will run in foreground and not return the DOS prompt to the command line. Generally this is not recommended but can be useful when:

1. Troubleshooting a problem with the IDS service - sometimes if the IDS service won't start, launching oninit in foreground can help eliminate possible causes - for example if the IDS Service informix user password is set incorrectly.2. Launching IDS in a relative directory to run HDR between two instances on the same machine (see an earlier post).

Update June 9 '06:

Run oninit.exe from a command shell in background.I hadn't thought about this method until I saw a comp.databases.informixthread that mentioned it. If you start a command shell as informix (or use runas) and run start /b oninitthe oninit.exe process will be launched in a background command window. This is a way to see verbose output from oninit, but still keep the process running in background. Because it's not running as a Windows service, oninit will not get its environment from the HKEY_LOCAL_MACHINE/Software/Informix/Online/%INFORMIXSERVER%/Environment registry key but from the user's environment. This is not necessarily a disadvantage as long as it is understood - in fact sometimes it can be an advantage. The only inconvenience is the need to be the informix user when you run it. You could work around this by wrapping it in a runas script like this:runas /env /user:informix "start /b oninit"

I typically use the starts method. For example the following batch file shuts down and re-starts IDS (assumes you have a gnu, Cygwin or equivalent tool like sleep installed), and takes command line arguments:

Note the above is hopefully the first in a series, as it is using the consumption of web services to get the information. The demo is not interactive (ie you cannot perform searches or insert data), but since you are exchanging information with a web server, the possibility of modifying the example is certainly doable.

So as it has been painfully obvious, I haven't been blogging particularly frequently over the past few months. Now on the one hand, you could just say that the "honeymoon period" for me on the blog is over, but the truth is I've been buried in regulatory compliance stuff and other security related issues. Of late, I've been working especially hard with a customer on implementing IBM Database Encryption Expert and Informix. It's been challenging learning a product that is focused at being integrated into the OS layer, but fun too. Of late though, I've wondered how much that might apply to application developers. Sure the intent is to be as transparent as possible, but if you data is have to be encrypted/unencrypted, do you want to know about it? And if so how much?

So anyway, I'm asking for feedback as to whether you would like to hear a bit more about encrypting databases, the methodologies, and what I firmly believe is the best choice for Informix, well ok all, databases.

So as I'm messing around with the Informix Ultimate-C edition for Mac, I also am looking at CSDK 3.50 too. And while there is nothing wrong with the product, it does make me wonder what else a Developer might like to see with the product. In out (C)lient (S)oftware (D)evelopment (K)it we have the following:

Embedded SQL for C.

ODBC

If you happen to be on a platform other than Mac, you also get JDBC.

What else would you like to see in a CSDK bundle? Maybe I'm getting spoiled but looking at Microsoft and Apple, if you get an SDK you actually get a a real toolkit, something that also helps you build rapid prototypes, or even full fledged applications. I honestly think that IBM has a solution there already too. The free version is called Data Studio, and with just a little tweaking IMHO, could be the exact gui programming tool I see missing from the CSDK bundle. Even then though, I think all we would see on Unix platforms would be JCC, JDBC, ESQL/C and ODBC, and the question then is "is that enough, or do you want more?"

Would PHP, Ruby, and perl be enough? What else could/should a developer want for a CSDK bundle? I want to hear you thoughts on the matter.

This article takes you through the basics of setting up encrypted database communcation using Secure Sockets Layer (SSL), which begins with requesting a Digital Certificate. The digital certificate is used to exchange keys at the beginning of an SSL connection, after which a random symmetric key is generated. The article also has a section on troubleshooting SSL in IDS.

One thing I like about Ubuntu is that everything is easy to install. Installing software, in the vast majority of cases, should be as simple as running a single command.

I am very happy to see free Informix Developer Edition software now available as Debian packages for Ubuntu. Packages are available for IDS, CSDK, OAT, and an IDS Demo instance. It makes Ubuntu the easiest platform to install IDS, just run a single command.

These packages have been developed for the Ubuntu 8.04 LTS (Long Term Support) release, but can be installed on the latest 9.10 as well (see below).

How to add the Ubuntu partner repository as a source (Ubuntu 8.04)I typically just vi /etc/apt/sources.list and uncomment the line for the partner repository. Then run "apt-get update" to retrieve the new packages lists. A more graphical way is to run the Ubuntu Package Manager and add a repository (click on these images to view larger versions)..

Once the partner repository is enabled you can see the Informix packages in the GUI Ubuntu Package Manager and install them directly:

The Chicago Infomrix User Group meeting looks to be a good one. Here is the invite email form Rob Beal...

Hello Informix Users!

Well, we finally have an agenda for the fall meeting!!

I hope you have saved the date, eg. Thursday, September 10th, to come to our meeting. As we discussed at the last meeting, this quarters theme will be around Application Development. We have an exciting agenda planned. We are pleased to announce that the esteemed Jonathan Leffler will be coming to Schaumburg to speak on Informix 4GL. We also have a local guru, Mr. Jamie Gebhard, who will be speaking on the new Informix Virtual Appliance and explore what that means to the Informix community.

So, down to the details...

As I said, the next meeting will be on Thursday, September 10th at the IBM Schaumburg offices (please note: NOT DOWNTOWN!!).

Here is the agenda:

8:30 - 9:00 Continental Breakfast (provided by IBM)

9:00 - 10:15 The Informix Virtual Appliance, or "Where do I get all the Free Stuff!". Presented by Jamie Gebhard, IDS developer

If you saw Jeff's SQL Tuning presentation a couple of years ago, please plan to see this one. He has re-done it for all the new features available in 11.5, and its really good!

For those of you who may not have been to the IBM offices in Schaumburg, we are located at 10 N. Martingale Road, Woodfield Preserve. The building is about a mile south of the Woodfield Mall area. We will be in the South White Pines room on the second floor.

We really hope you can make it to this meeting as it should be a good one. If you can make it, please contact me, Rob Beal, at rbeal@us.ibm.com. Let me know if you have any questions as well.

We hope to see you there! and as always, thanks for your continued support of Informix!

The appliance is similar in some ways to IBM's SLES 10.2 based Informix virtual appliance, following the basic format of a pre-installed instance of IDS 11.50.xC4 Developer Edition, associated drivers and tutorials. You will see a few differences, such as tighter intregration with AGS Server Studio and other Bell Micro customizations.

I like using Ubuntu and am very happy to see an Ubuntu based IDS appliance available. I find it to be one of the most accessible and easy to use Linux distros out there and get a lot of work done with it running on my old laptop (which IBM keep asking me to return, I'll do that any year now).[Read More]

During this morning's Chat with the Lab on Virtualization and Cloud computing with IDS (which I thought went quite well, in that it wasn't the worst webcast I've done, though I always think of some extra things I could have said afterward), I made a vague threat to post a link on this blog to an IDS High Availability demo showing HDR and MACH11 failover across Amazon Availability Zones.

Today IBM announced a partnership with Amazon Web Services (AWS) to deliver pay-as-you-go instances of IDS 11.50 Developer Edition and other IBM Software Group products running in the AWS Elastic Compute Cloud (EC2). The IDS 11.50.UC3 Developer Edition instances, running on SUSE Linux Enterprise Server 10 SP2, are available now to purchase and use at the Amazon base rate of 10c/hour.

Getting started is simple. Find the IDS catalog entry and Select Purchase (note that purchase doesn't imply any up-front expenditure, just that you'll be billed for actual usage charges at the Amazon base rate):

Management of the instances is straightforward via the AWS Management Console, and a suite of command line utilities is available that make activities such as unlocking ports easy to do. Follow the Getting Started Guide (PDF) for the detailed steps.

Venu, PJ and Terri trying not to scare people away from the Informix booth

Recently IBM has added a 32-bit Mac version of the Informix Client SDK (useful for Ruby developers) and made improvements to the IDS installer look and feel on Mac OS. We have a few demo's running this week.. a FileMaker application using an Informix backend, a high availability demo showing Mac based Mach11 and ER systems handling failover scenarios, an IDS virtual appliance guest OS running under VMWare Fusion acting as a client and using OpenAdmin Tool to administer IDS running on a Mac, and a Cocoa application written in Objective C integrated with ODBC which uses the Basic Text Search Blade to do freeform text searches on an Informix database.

The high availability theme will be continued on Friday at 1pm when Carlton Doe presents a session entitled Building Enterprise-class and Virtually Fail-safe Database Services on the Mac.

Certain people have accused me of being a PC and not a Mac. Maybe, but after spending some time tinkering with Xcode and seeing how fast IDS runs on it, the platform is starting to grow on me.[Read More]

Informix Dynamic Server (IDS) has established itself as a cult database in the market. Its fans admire the unmatched reliability, the easy and compact administration as well as the impressive speed. In versions 11 and 11.5 IBM has massively invested in the development of IDS technology. IDS 11.5 allows the creation of highly available, scalable database-clusters on top of cost-efficient hardware with intelligent load balancing.IDS solves the challenges of critical OLTP environments, which requre "round the clock" availability, with its usual easy administration and configuration. Also IDS is the first choice as an integrated database, delivered as part of the application. Learn more about the sophisticated technology of IBM IDS in this book.

There is an additional a description of the book, including an errata and sample pages at Informix Zone.[Read More]

Version 2.1 of the free DataStudio Developer was announced earlier this month, and some useful Informix specific feature enhancements are included the new release.

New Informix related features include, among other things:

Support for running UPDATE STATISTICS for databases, tables and columns.

Viewing statistics information for tables, columns and indexes.

Improved Trigger support - you can create and alter triggers in the data source explorer.

Table Fragmentation support - when creating a table you can specify Round Robin or Expression based distribution, and add partitions (and expressions), and also edit the partitioning strategy for a table.

I am somewhat ignorant when it comes to virtual worlds and massive multi-player online gaming (unless you count Webkinz, where I play a mean game of Quizzy's Word Challenge), but it is clear there is vast potential for data management in this segment.

I've been putting IDS 11.50.xC2 though its paces this week and it has been a pleasure to see a few long standing usability issues addressed, particularly on Windows. For everyone who uses IDS on Windows I strongly recommend upgrading to 11.50.xC2. In this post I'll mention a few of the new features in xC2 that make it worthwhile. To see the full list of changes in xC2 take a look at the Release notes for UNIX and Release notes for Windows. Update 9/13/08: See also Fernando's Blog.

Multiple Installations of IDS on the Same Windows machineWhen the IDS installer switched to using Installshield as its framework in version 11.10 this implementation caused a slight problem. Only one copy of each major version of IDS could be installed, so you couldn't for example have a separate development and production installation of 11.10 on your machine. At least you could still create multiple instances via the Instance Manager.

In IDS 11.50.xC1 support for multiple installations was reintroduced via an undocumented "-multiple" command line argument to the setup.exe program. Every time you ran "setup.exe -multiple" a new installation would be created in the path of your choice.

In IDS 11.50.xC2 the multiple installation support is once again the default behavior. Any time you run setup.exe, if there is an existing installation of IDS on the machine, you will be prompted to create a new instance. If you want to run setup.exe to maintain an existing installation, you can use the new -path or -instnum arguments to identify a specific installation.

Note for backward compatibility the "-multiple" argument is still supported, though no longer required.

The ISM GUI Program is backIf you're very old you might remember earlier versions of IDS 7.x included a graphical interface for the Informix Storage Manager called ISM.exe that allowed you to create and view storage devices, monitor storage manager operations and other tasks. In some ways it provided equivalent functionality to the UNIX ism_watch program. For obscure reasons, shrouded in mystery, the ISM GUI was dropped from the distribution some time in 7.3x and never seen again. Until 11.50.xC2 when it has been resurrected and rebuilt by popular demand.

The Configuration Wizard is improvedThe configuration wizard was a new install feature introduced in IDS 11.50.xC1 thanks in part to input we received from usability sessions. For the first time you could have the install program detect your hardware configuration (CPU settings, disk size and speed), ask you some questions about the expected number of decision support and OLTP users and create an optimized onconfig file for you. Internal TPCC benchmarks showed that performance from a Config Wizard versus a manually tuned configuration file was very close and significantly better than the default configuration based on onconfig.std (incidently onconfig.std was also improved in 11.50 - with better inline documentation for parameters and more realistic values).

One usability issue with the Config Wizard on Windows in xC1 was that the onconfig file it would generate would have some UNIX specific values for parameters such as for Java stored procedures (JVPJAVAVM etc) which would mean extra work configuring those features on Windows. In xC2 the config wizard was redesigned to layer its onconfig enhancements on top of the onconfig.std file for each platform, resulting in an optimized onconfig file tailored to the platform it was installed on.

Banishing DLL Hell with SHMNOACCESSAnyone who likes to use large shared memory configurations on 32-bit Windows has to think about where DLL's are loaded in memory by processes such as oninit.exe, onmode.exe, onstat.exe and onbar.exe. Any process that attaches to a shared memory segment needs a matching contiguous range of address space, and any DLL loaded by that process potentially fragments the address space. I have ranted about the DLL hell issue on previous occasions (part 1, part 2, part 3, part 4).

Even with all Microsoft and IBM fixes, it was still possible to get into a situation where the oninit process creates a shared memory segment that overlaps with where another process that needs to attach to that segment has loaded a DLL, resulting in a "Unable to attach to shared memory" error. Enter the SHMNOACCESS onconfig parameter. You can use this to exclude any regions of address space where you do not want oninit to create a shared memory segment. As of 11.50.xC2 it works on all types of segment (resident, virtual etc). This was the final tool needed to avoid 32-bit DLL problems in large memory configurations. As an anonymous tech support engineer (Tim Steele) said, "the Windows witch is dead!".

Debug libraries are included on WindowsThis is one of those features most customers do not need to care about, but makes tech support and development engineers who need to debug optimized code very happy. The .PDB debug libraries for the IDS executable processes are now included in the install media (but not installed). Using these it is possible to see a valid stack if you attach a debugger to an oninit process or analyze a crash dump. This can dramatically reduce the time to find the root cause of a problem.

Better Windows Server 2008 SupportIn most cases IDS 11.50 works fine on Windows Server 2008, but in FC1 (64-bit) there was one class of Intel CPU (Intel64) that the installer wouldn't recognize. This and a few other Win2K8 issues have been fixed in xC2. One fix is still to come - getting the finderr utility working again without needing to download Winhelp. There are plans in place to fix this soon.

Why IDS on Windows anyway?I talk about IDS on Windows a lot. Being the Windows architect might be a factor, but there are reasons why the Windows port of IDS is important. Windows is one of our top 5 production platforms along with Linux, Solaris, HP and AIX (in no particular order). Windows is also often the platform people see IDS on for the first time, simply because the Developer Edition is freely downloadable on the web and a lot of people are using Windows when they download it. We also provide it on the IDS Discovery DVD we give away at conferences. That's why I'm very happy to see a release of IDS that has significant improvements for Windows.

If you deploy IDS on non-Windows platforms, there's a reasonable chance you have a laptop running Windows. IDS has a small footprint so you can have the Developer Edition running for free on your laptop without much overhead. There it's good for learning/training, development and demonstrations. As well as IDS on my XP OS, I also have it running via VMWare on Ubuntu, SLES, XP (again) and Windows Server 2003 all on the same machine. Running multiple instances of IDS on multiple operating systems at the same time does not put much strain on the machine.

Mac OS X Installer improvements11.50.FC1 saw our first Mac OS X port, and with FC2 the installer has been improved. Now it can automatically make any required adjustments to kernel parameters, and it creates a terminal icon for easier access to the demo instance. A lot of development work is going into to making further installer improvements for Mac OS.

IDS Developer Edition is now upgraded every fixpackFor IDS 11.10 there was only one version of the free Developer Edition provided, 11.10.xC1. I had issues with this, because any defects found in xC1 were not going to get fixed for people developing with and evaluating IDS for the first time. Now with IDS 11.50 the Developer Edition is upgraded every fixpack so you get the latest and greatest. Get your free 11.50.xC2 IDS Developer Edition for the platform of your choice here.

Enterprise Replication Hardening (all platforms)One other area I'll talk about is ER. There has been a big focus on improving the resilience of ER, making it more efficient with memory and better able to handle low memory situations, and generally work better in an embedded environment. Among improvements in xC2 are:

Limiting memory use during synchronization with the -memadjust parameter

New syscdr tables for obtaining ER status information via SQL:

syscdr_state Contains information on whether Enterprise Replication, data capture, data apply, and the network between servers is active. syscdr_ddr Contains information about the status of log capture and the proximity or status of transaction blocking (DDRBLOCK) or transaction spooling. syscdr_nif Contains information about network connections and the flow of data between Enterprise Replication servers. syscdr_rcv Contains information about transactions being applied on target servers and acknowledgements being sent from target servers. syscdr_atsdir Contains information about the contents of the ATS directory. syscdr_risdir Contains information about the contents of the RIS directory. syscdr_ats Contains the first ten lines of the header of each ATS file. syscdr_ris Contains the first ten lines of the header of each RIS file. syscdr_rqmstamp Contains information about which transaction is being added into each queue. syscdr_rqmhandle Contains information about which transaction is being processed in each queue.

Monitoring the whole ER domain with the cdr view command

Preventing ATS or RIS file generation

There are various other new features, such as improvements to OAT and SQL enhancements, as well as numerous defect fixes. 11.50.xC2 is one of those releases where you really want to take a look at the release notes to see what you are getting and what you can make use of.[Read More]

There is a trend within IBM to move to using DVD as the standard software install media.

There has been talk about doing this within Informix before, partly because we're close to the maximum CD size on some platforms (where more than one copy of Java Runtime needs to be on the CD for example).

One advantage moving to DVD would provide is the ability to bundle additional components, for example Data Server Driver, which provides the Comment Client API's to connect to IDS via the DRDA protocol. Currently if you want components like this you would have to download them separately.

Once concern that has been raised is could this lead to bloating of IDS? E.g. if we're not so concerned about space might the install footprint go up? We would certainly have to be very careful about what is installed by default if we were to add components to the bundle.

Would anyone be inconvenienced if the IDS install media was no longer available on CD? If you see a problem with that please leave a comment or contact me. I am also curious as to what percentage of people download all their products electronically.[Read More]

What have your experiences of installing IDS on the Mac been like? What have we done right and what can be improved? I have finally re-enabled comments as the memories of the last spam attack begin to fade, so please let me know what you think.[Read More]

There has been some speculation on the newsgroups as to what IBM's motivation for this is. Bernie Spang is quoted in the announcement as saying:

"There are many Mac application developers in education and government who are looking for high performance, high reliability and scalability for database management software," Spang said. "It's important for them that it not complicate their experience. Mac is known for its ease of use. And ease of management really means no management at all."

Expect to see more announcements in the coming weeks concerning Cheetah 2 features, and open beta availability for other platforms. In the mean time, if you have Mac OS X 10.5, give the first Cheetah 2 Beta a test and enjoy IDS on a Mac. Oh, and let us know what breaks. Well it is a beta, what do you expect :-)

Update: 1/17/08 - I'm adding a comment made by Brad Patterson to the main post as it is worth knowing before you download:

It's not readily apparent, until you download the dmg file and install the IDS beta where you can read the machine notes, that this release is compiled only for Intel Core 2 Duo and the latest Xeon processors (32/64-bit Intel architecture), not the Core Duo CPUs.

The files are x86_64 (64-bit) only and will not run on "older" Intel Macs.