UniAccess Frequently Asked Questions

An Important Note about Access Keys
You must contact UniAccess Technical Support to obtain your permanent product keys.
A 45-day temporary product key is included with the UniAccess PC Client CDs. You must contact UniAccess Technical Support to obtain your permanent product keys. AIS will require the UniAccess level, the temporary product keys, and the Manufacture Control Number (MCN) of your system to generate the product keys. You may obtain the MCN via one of the following methods:@@CONS MODELNUMor@sys$lib$*uautil.mchinfo(or sys$lib$*uautilt.mchinfo)
Once the temporary product keys and the MCN number are supplied, AIS will provide the product keys within one working day. Be sure to include your MCN number and temporary product keys with the request.
Question (UniAccess #683):
When UACS issues a message to the console, what values does UACS specify for the console class and the control bits in the COM$ packet?
Answer:
Messages sent by UACS to the console may be sent to the system console or to a remote terminal acting as a console using the @@CONS keyin. When the message is sent to the system console, the COM$ packet fields are:
Control bits = 04
Additional Control bits = 03
Routing Information = Not Used
When the message is sent to a terminal/console, the COM$ packet fields are: Control bits = 14
Additional Control bits = 03
Routing Information = Siteid of the terminal in Fielddata.
The message group number (console class) field is not used by UACS and is = 0.
Question (UniAccess #855):
The UADriver always changes requested query timeout value to zero therefore not allowing applications to change the timeout value. Why is this?
Answer:
The driver always changes the query timeout value to 0 because the driver has no way to stop OS 2200-based processing. For example, there is no way for UADriver to cancel processing that is occurring within RDMS 2200 once the command is under the control of RSA. To be consistent, UADriver returns 0 which indicates that the query timeout value is being ignored.
Question (UniAccess #935):
Sometimes when people do SQL requests using UniAccess, an undeliverable message (see below) comes out. Is there a way to suppress this? ======== Undeliverable Message ========

Name: sp_pkeys
Code: 32000
Severity: 15
Text: UARS Library error (UASNDDON returned [16046]: srv_done():

results state error - final done already sent to client.)
Answer:
There is no way to suppress this message. A workaround would be to send the output from this transaction to a dummy printer and then have a process, such as smart console, periodically delete items from this queue. However, this method is not recommended because it could destroy indications of problems that are occurring on the system.
UARS is the AIS-written language transaction that, under normal conditions, will not produce any output. Any output being received warrants investigation.
Question (UniAccess #955):
When a TIP session control timeout occurs, the logoff transaction does not get scheduled.
Answer:
This is due to the fact that without a TIP session id, the transaction cannot get scheduled. Since TIP Session Control closed the session, scheduling the transaction would be illegal. UniAccess will write out the following trace message: 05/20/06 10:08:01:219 [115124000003] [116] *ERROR*

TIP Session Control forced closure preventing scheduling of LOGOFF transaction, User = [bluefish] pid = [1500].
Question (UniAccess #962):
The UADriver test value for the current schema is misleading.
Answer:
None of the information displayed under the Host Environment Information section is a reconciliation of client settings vs. host settings. It is simply what is configured on the host. Here is the description from the help file:
"This section lists the information that was returned by the language transaction that was selected. Results will vary depending on the language transaction selected, but version and connection information will be included. All options that can be overridden by UADriver are indicated with a USEROVERRIDEON parameter."
Question (UniAccess #1029):
I think there are some advantages if UARS can be scheduled as the online batch program. For instance, the online batch programs are well proved technology and can be configured longer execution time than other type. Also it is easy to manage execution priority. None online batch transaction running at demand/batch priority would confuse the operator.
Is that possible to support online batch in the future release of UniAccess?
Answer:
Changing the VALTAB level parameter (LEV) will allow the transaction to execute at a demand/batch execution level without changing initial state of the transaction.
Changing UARS to allow the transaction to be executed as online batch is unlikely to achieve the goal of reducing the transaction execution priority. UARS would have to CONECT to TIP to achieve some of its functions. The "OS 2200 Transaction Processing Programming Reference Manual", in section 2.1.1, states:

"Batch-connected and online-batch programs use the CONECT and DISCON primitives or the MCB initialization and termination functions to initialize and terminate execution.
Any code between a CONECT and a DISCON runs at transaction priority. Other code runs at the program's appropriate priority."
The operator keyin TP RC will return the level as well as other information about the executing transaction.
UniAccess uses the application group information in the PCT. This information is not contained in the PCT for online-batch transactions.
Question (UniAccess #1066):
We're getting sporadic problems where UniAccess transactions don't terminate properly and the following in the transaction print files. Could somebody give us an indication of what's going wrong here? TIP$00*UARS1-13J6$(1):

======== Undeliverable Message ========

Name: UARS1
Code: 32000
Severity: 15
Text: UARS Library error (UASNDROW returned [16105]: UAMM Error, general error: 5, detailed error: 31.)
======== Undeliverable Message ========
Name: UARS1
Code: 32000
Severity: 15
Text: UARS Library error (UAACCEPT returned [16031]: Server process '1' is not active in 'uaaccept()'.)
Answer:
This is the error you will get when the client disconnects while the UARS transaction is running. This can be verified by inspecting the UACS trace file (UACS traces must be set to HIGH).
Question (UniAccess #1069):
How do you optimize the performance for a very often used overnight UniAccess data transfer transaction to a MS SQL-Server using the Linked Server?
Answer:
The following are four suggestions for improving performance:
  1. Refer to section "UniAccess Communications Server Optimization" in Chapter 8 of the UniAccess for OS 2200 System Administration Guide. Pay particular attention to the UAMM PROCCNT parameter.
  2. Use CPCOMM rather than CMS. (The TCP/IP stack in CPCOMM is faster.)
  3. In the SQL Server configuration, verify that a commit is not being performed after each insert.
  4. Consider upgrading your product to UniAccess Transaction Server and writing your own server-library transaction. UniAccess Transaction Server (UATS) programs use compiled SQL; UniAccess Relational Server (UARS) uses embedded SQL. More information regarding UniAccess Transaction Server can be found in the UniAccess documentation as well as www.appliedis.com.
Question (UniAccess #1093):
SQL Server linked server pass-thru query results in:
Server: Msg 7347, Level 16, State 1, Line 1 OLE DB provider 'STREAM' returned an unexpected data length for the fixed-length column '[STREAM].attribute_value'. The expected data length is 80, while the returned data length is 3.
Answer:
Set UADriver workarounds=16.
From UADriver Help: Some applications require that fixed length character columns be blank-padded to their maximum lengths. This option causes all result set columns that are retrieved via SQLFetch or SQLExtendedFetch to be blank padded to their maximum lengths.
Question (UniAccess #1155):
Some Japanized software require LANG variable is set to Japanese locale, in this case Japanese_Japan.932. However, ODBC client failed to connect to UACS if environment variable LANG is defined as Japanese_Japan.932. And sybint.err file is generated and the contents contains"The context allocation routine failed when it tried to load localization files!! One or more following problems may caused the failure Your sybase home directory is C:\Program Files\Applied Information Sciences\UAnnnn Check the environment variable SYBASE if it is not the one you want! Using locale name "Japanese_Japan.932" defined in environment variable LANG Locale name "Japanese_Japan.932" doesn't exist in your C:\Program Files\Applied Information Sciences\UAnnnn\locales\locales.dat file" 1) What is the role for LANG variable?
2) If LANG variable need to be set to Japanese_Japan.932, is there any workaround?
Answer:
You can either set LC_ALL to enu (Sybase checks this first before checking LANG), or add a dummy entry to their locales.dat file pointing the Japanese_Japan.932 to US English.
Question (UniAccess #1160):
We have problems reading fields of type DATE or TIME, from a SQL Server client. How can this be done? Can you give examples?
Answer:
The simplest way is to use a variable to contain the date time value and four-part names. For example: declare @date_var datetime select @date_var = '2006-01-01' select * from ais500prod.UASAMPLE.SECOFFUSERID.EMPLOYEE where SHIFT_ROTATION>= @date_var In the above example:
ais500prod is the name of the linked server that points to RDMS.
UASAMPLE is the name of the RDMS schema being accessed.
SECOFFUSERID is the name of the owner of the table being accessed.
EMPLOYEE is the name of the table being accessed.
The above example is accessing the UniAccess sample database described in Appendix C of the UniAccess for OS 2200 System Administration Guide.
The key is to get SQL Server to pass a date/time parameter to the UniAccess ODBC Driver. When the date time is passed as a literal in the SQL statement, UADriver doesn't know that the data must be converted to RDMS format.
Question (UniAccess #1215):
UACF processing failed with the following error message. UAMM initialization failed [1] [0]. [3] *ERROR* I think this is ok, because this error means UAMM is already initialized.
However, UACS that is executed just after this error failed because UADT is not initialized. Is this possible?. I think UACF,I initializes both UAMM and UADT.
Answer:
Is this a new installation? If so, or if you made changes to the UADT portion of the configuration file, the UACF processor must be executed at least twice to initialize the UniAccess System. First, it is executed to read the two source configuration files and to create the UniAccess Configuration File. (SYS$LIB$*UAUTIL,A . In doing so, it checks the syntax of source statements and verifies that the necessary relationships exist among them. After the configuration succeeds, UACF must be executed again to initialize UAFG (SYS$LIB$*UAUTIL.UACF,I). During this step, it initializes the UAMM and UADT services within the fixed-gate.
Question (UniAccess #1518):
A user at our site was wondering why his client program terminates when the called UniAccess RPC TIP transaction aborts. In his case the TIP transaction is taking a max time abort. A Sniffer trace shows a TDS frame coming back from the host but it contains a TDS token type of x 'AA' (error message). Is this token type what causes the client to throw in the towel and/or is there a way around this?
Answer:
When a UASL TIP transaction error terminates after sending output, we close the connection. When a UASL TIP transaction error terminates prior to sending output, we send the message "UACS error: Transaction error detected...". The reason the behavior changes depending upon whether the transaction has sent output is that once the transaction has sent output, we can't guarantee that we can properly place the message in the TDS stream.
How are you coding the call to the transaction? If you are using .Net, you can place the request within a Try/Catch.
Question (UniAccess #1544):
I have a problem where the file UNIACCESS1S1*ODBCAREA3 is assigned by UDSSRC and is also on an old FAS Backup tape I need to cycle. I note the last reference date for the file is back before the date of my most recent initalization and start of the UniAccess background run.
How do I get this file free to copy, delete, recatalogue, and restore so that I can free the FAS Backup tape? It is obvious that dropping the UniAccess run doesn't free the file.
Answer:
This is a normal UDS/RDMS database file. It should be maintained using the IRU. The IRU DOWN command should be used to free the file from UDS Control. The IRU UP command should be used to allow access to the file. For additional information, please see Chapter 4 of the Integrated Recovery Utility Operations Guide.
If for some reason, the IRU DOWN command will not free the file, the SUDS FF command should be used as a last resort. For additional information, please see chapter 8 of the Universal Data System Administration and Support Reference Manual.
Question (UniAccess #1556):
Does UniAccess ODBC allow the customer to execute (CREATE) PROCEDURE, (CREATE) FUNCTION,GET PARAMETERS commands via UNIACCESS ODBC?
Answer:
There are two parts to our response. The first part addresses the UniAccess ODBC driver, and the second part addresses the UARS transaction.
First, no the UniAccess ODBC driver does not parse the "[CREATE] Procedure" command. There are currently no plans to add the ability to parse this command to the UniAccess ODBC driver. (The "[CREATE] PROCEDURE" command is not part of the ODBC SQL grammar, nor SQL-92.)
If a parsing error is detected using the SQLExecDirect interface, the original statement will be passed to RDMS for processing. The modifications to the SQL statements discussed in the UniAccess for OS 2200 Client Guide will not be applied to SQL statement. Handling SQLExecDirect parsing errors in this manner allows RDMS syntax to be passed by UADriver to RDMS.
If a parsing error is detected using the SQLPrepare interface, the client application is notified by the return code of SQL_ERROR. After failing the SQLPrepare, this statement is not eligible for execution through the SQLExecute interface.
Note: The semicolon is not used as an SQL statement terminator in ODBC SQL grammar. If a semicolon is used in an SQL statement passed to the UADriver, the statement will encounter a parsing error.
Second, if the CREATE PROCEDURE form of the command is passed to the UARS transaction, it will be passed to RDMS. If the optional word CREATE is not used, the command will be rejected by the UARS transaction with the message "Unsupported verb specified: PROCEDURE".
Please note that the allowable syntax of the "[CREATE] PROCEDURE" statement varies by RDMS level.
The syntax for RDMS 11R1 is: PROCEDURE [schema-name.]routine-name ([parameter [,parameter]...]) stored-procedure-statement The syntax for RDMS beginning with 12R2 is: [ CREATE ] PROCEDURE [schema-name.]routine-name ([parameter [,parameter]...]) stored-procedure-statement Summary: The UniAccess ODBC driver will pass the "CREATE PROCEDURE/CREATE FUNCTION" commands to the UARS transaction when the SQLExecDirect API is used. The UARS transaction will pass the "CREATE PROCEDURE" command to RDMS for processing.
Question (UniAccess #1964):
We have a UniAccess license for 2 concurrent threads and would like to know why Excel is using both of them.
Answer:
ODBC applications may use multiple connections for various reasons. For example, one connection to retrieve catalog information and another connection to retrieve data. While another application may retrieve both catalog and data on a single connection.
The number of ODBC connections used by Excel is dependent upon how it is being used to "Import External Data". We notice that it will typically use two ODBC connections when you select "New Database Query", but will use a single ODBC connection when you select "Import Data" to build a query. "Refresh data" uses a single connection, once the query has been built.
Question (UniAccess #1966):
How does UaDriver operate in the 64 Bit Windows environment?
Answer:
Although the UniAccess ODBC driver is a 32-bit application and has not been tested on a 64-bit Windows platform, our research indicates that it should be compatible in many environments. The underlying factor in determining the interoperability with the 32-bit UADriver is whether application is 32-bit or 64-bit. If the application is 32-bit, it must use a 32-bit ODBC driver. Windows Server 2003 64-bit and Windows XP 64-bit can both execute 64-bit applications and existing 32-bit applications. 32-bit applications use "Windows On Windows 64" (WoW64) x86 emulator. Wow64 allows 32-bit productivity applications developed using the .NET Framework 1.0, 1.1 and 2.0 and Win32 to run on 64-bit Windows and take advantage of the 64-bit Windows kernel which offers a larger number of kernel handles and window handles.
WoW64 emulation is performed natively (on the chip) by the x64 micro-architecture, which means WoW64 performance on x64 is similar to that of 32-bit Windows. However, because the Itanium (IA64) architecture does not support native WoW64 emulation, WoW64 performance
Question (UniAccess #2107):
Can you give me some explanation as to how the PID numbers get allocated?
Answer:
UACS uses a First-In-First-Out (FIFO) Allocation Scheme. UACS creates a FIFO chain of free PIDs during UACS start up. The initial head and tail of chain are the first and last PIDs in the UACS configuration. PIDs are always assigned from the head of the FIFO chain and when they are released they are appended to the FIFO tail. This means that the first set of PIDs assigned will cycle thru all configured PIDs. After this first allocation cycle, the order in which PIDs are allocated is entirely dependent on the order in which they are released. All PIDs and their associated UACS controls are allocated within large banks (Pdbank). The number of Pdbanks created depends on 2 configuration parameters, COMSRV PIDCNT and UAMM BLOCKSIZE. Normally only 1 Pdbank will be created, i.e. a BLOCKSIZE of 512 or 1024 will only cause 1 Pdbank to be created even if 65000 PIDs are configured.
A BLOCKSIZE of 2048 will only cause, at most, 2 Pdbanks to be created depending on the value of PIDCNT. A BLOCKSIZE of 4096 will only cause, at most, 4 Pdbanks to be created depending on the value of PIDCNT.
UACS checks for PID timeouts every n seconds, where n is the value of the COMSRV TIMOUTWAIT parameter. Regardless of this value, UACS checks for operator input every 3 seconds.
During the PID timeout loop, PIDs are subject to the following COMSERV timeout parameters: BADPIDTIMOUT (Server TRX)
BLKPIDTIMOUT (Server TRX)
CONTIMOUT (Server TRX)
NWRTIMOUT (Server TRX/Client)
NWWTIMOUT (Server TRX/Client)
Note that the UADTC Service PID is not subject to UACS timeout constraints - it uses its own configurable timeout parameter to determine when it should disconnect from UACS.