Everyone,

Just a couple of comments on this thread (including lots of comments that have
come in over the past few hours).

First, it is not a surprise to us that there are differences in lengths in the
DB and in the Remedy length under some conditions.  This is actually a designed
behavior of the system (which I will explain).  There are other conditions
under where a difference is benign -- but not expected.  Finally, there may be
conditions where a difference is NOT benign and is definitely not expected.

First, the majority of cases, the field length in the DB will match the field
length in the AR System definition.

Now, in the case of mismatches....

For those cases where the DB length is GREATER than the length in the AR System
definition, this is a situation that is expected and as designed.  It occurs
when you have a character field that has a maximum length such that a varchar
or nvarchar or equivalent type in the database you are using is created
(generally 4000 to 8000 bytes in the currently supported databases) and you
make a change to the AR System definition to make it SHORTER.  In this case,
we shorten the length definition at the AR System level but do not restructure
the database.  Several reasons for this.  One, the database stores varchar and
nvarchar (and the like) types using only the space you need.  So, it does not
take the full length definition.  This means that the same amount of space is
used in the database for both lengths -- it is about the data content.  Two, it
saves a DB restructure operation from being performed to restructure the column
to match the new length.  So, the end result is a more efficient operation with
no downside from the perspective of data storage.  It also has a side effect of
not truncating data for cases where customers have changed the length, realized
that it is not correct, and then made it bigger again.

NOTE: If you make the length LONGER -- even by 1 byte -- from what the AR System
thinks it currently is (regardless of what the DB length actually is as that
length may be longer from a previous shortening of the length), we DO cause a
DB restructure and will change the length of the DB column to match the AR
System definition.

So, for systems that have been around a while and have lots of different
upgrades and customizations that have been performed, you may end up with quite
a few cases where the AR System length is shorter than the DB length.  All
interaction with the system and create/modify/merge operations will enforce
the AR System length for all new records.


The second scenario is join forms.  We do have field limit definitions for join
fields, but many of the characteristics are from the underlying field.  This
includes the field type and length and other things.  But, in the metadata
tables, we copy the definition of the underlying fields into the join definition
when we create the join.

I suspect you are seeing the field length difference on join fields as an issue
where the underlying field has changed length after the join was created.  That
value is NOT used in the metadata for the join field -- yes, it is there, but it
is not used.  The actual value is the value on the underlying field definition
not on the field at the join level.

Now, this is the benign difference.  It is different but it doesn't matter as
the value has no meaning in the join.  Sure, the system should be propogating
that change as a "documentation" change in the metadata, but as the metadata are
internal tables for internal to the system use, it probably was not thought to
be worth the time and energy to propagate a piece of information that didn't
matter.  It does not cause any runtime or definition time issue.  It will be
visible only to someone trying to deep dive and interpret the metadata tables
directly.

Finally, we come to the situation where if you have it is definitely NOT
expected and can cause odd errors in the system (although it should not cause
crashes or hangs but it can definitely cause odd SQL errors).

If you have a situation where the AR System length is LONGER than the DB length
for a field of type char/varchar/nvarchar and the field is a regular field and
not a join or a view form, this is not as expected.  This would be an
inconsistency that we cannot account for and where there could be issues
generating odd SQL errors during runtime.  Again, I would expect that to be the
worst result, not a crash or hang but just odd errors when something is longer
than the DB length but not than the AR length (and some DBs would just quietly
truncate the value to the DB length).


I hope this helps to clarify what you should see in the metadata tables if you
do start playing around with our internal definitions.  One situation that is
fully as expected (shorter AR System length that DB length).  One situation
where the value doesn't really matter and is not really used (AR System length
different than underlying table length when the field is on a join form -- look
at the length of the actual field that the join field points to as that is the
real length).  And, unclear whether any example shows this case, One situation
that is an issue if it occurs where the DB length is SHORTER than the AR System
length.

Hopefully, this explanation helps clarify what you are seeing and offers an
explanation about why it is all OK -- unless that is you are seeing the third
situation and then we should take a look at how that could have happened on your
system (and a quick workaround to simply increase the length of the field by 1
byte which forces the AR System to change the length to that new length and then
to reduce the length by 1 byte to get back your original restriction (and the
DB length will be 1 more than your AR System definition).

Doug Mueller

-----Original Message-----
From: Action Request System discussion list(ARSList) 
[mailto:[email protected]] On Behalf Of LJ LongWing
Sent: Thursday, February 23, 2012 9:20 AM
To: [email protected]
Subject: Not Matching Lengths

List,
Our Dev server started crashing a few days ago and we had a VERY hard time
trying to identify the cause.  After several days of trial and error, one of
the developers on the team noticed that a field length in the DB was not the
same as a field length in Remedy.  After further troubleshooting it was
found that the server stopped responding after doing a query/insert into
that table using that field ID....the only 'fix' I could find to get them
back in sync was to delete the field and re-create it.  We haven't had the
server crash since I did that....so it got me thinking that there might be
other fields with similar problems, so I started looking...I was shocked by
what I found and want to run it by some other people on the list to see if
they come across similar results.  The Query I have provided below is
running just fine on SQL Server 2008 R2...I don't know the equivalent for
Oracle...but I would like to know if other people find a large amount of
columns where the two values don't match.  With the below Query I came up
with 382 mismatches, many of which are on system generated forms, but a
majority of which are on my custom forms.  This is an OLD system...it's been
around since at least 6.0...and upgraded and modified in almost every major
revision since its inception.  We are currently on 7.6.4 SP1....and I can
confirm with a form that I created yesterday...I created a 255 character
field...then shrunk it to 30, and it is on my list of mismatches....curious
about your results...please reply back :)

select a.name, f.fieldName, fc.maxLength as 'RemedyMaxLength',
c.CHARACTER_MAXIMUM_LENGTH as 'DBMaxLength'
from arschema a
        inner join field f on f.schemaId = a.schemaId
        inner join field_char fc on a.schemaId = fc.schemaId and f.fieldId =
fc.fieldId
        inner join INFORMATION_SCHEMA.COLUMNS c on c.TABLE_NAME =
'T'+CAST(a.schemaId AS char) AND 'C'+CAST(fc.fieldId as char) =
c.column_name
where fc.maxLength != c.CHARACTER_MAXIMUM_LENGTH
AND c.CHARACTER_MAXIMUM_LENGTH != 2147483647
and f.fieldId != 1

Name    Field Name      RemedyMaxLength DBMaxLength
AR System Currency Label Catalog        Short Description       4       254
AR System Currency Ratios       Short Description       4       254
Alert Events    UNUSED  5       254
Server Events   Unused_Descr    3       254
Server Statistics       Short Description       3       254
User    Password        30      255
User    Computed Grp List       255     4000
AR System Administrator Preference      Short Description       128     254
AR System User Central File     Short Description       128     254
AR System User Preference       Short Description       128     254
ReportSelection OriginalFormServer      128     254
ReportType      Short Description       128     254
FB:Alarm Events Monitor ID      15      254
FB:History      Short Description       128     254

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org
attend wwrug12 www.wwrug12.com ARSList: "Where the Answers Are"

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org
attend wwrug12 www.wwrug12.com ARSList: "Where the Answers Are"

Reply via email to