For other people's reference, if they have any interest in Oracle
replication, I created enhancement request SW00425739 to update Remedy
to create a primary key for all tables.

Regards,
Axton Grams

On Mon, Feb 27, 2012 at 3:27 PM, Axton <[email protected]> wrote:
> We did not see a primary key defined for the T, H, or B tables, or the
> meta-data tables, so we created a primary key on those tables.  We
> did, however, see a unique index on all the T, H, and B tables.  We
> are rethinking our approach because in later versions of Oracle
> Streams they added an option to use a unique index, versus an explicit
> primary key, for replication purposes.
>
> I was referred to this KA on my inquiry to support:
> https://kb.bmc.com/infocenter/index?page=content&id=KA305401
>
> Which, at the end, states:
>
> "In essence this is not something that is currently available in AR
> System, the only primary keys added was for Sql Server and Sybase
> because those were the only two databases that needed primary keys for
> replication. The thought was that other databases don’t need to have
> primary keys and they can be replicated just with the presence of
> unique indexes."
>
> While this appears to be true today, this was no always the case.
> This is still not true for some of the meta-data tables because they
> have neither a unique index or a primary key constraint (e.g.,
> actlink_set_char, actlink_set, filter_notify).  While replication can
> still work on these tables, it forces the database to perform a table
> scan for each replicated record, comparing the value of every column.
>
> The primary key can be defined at the time the table is created or
> after the table is created and is different from a unique index.  Take
> this DDL from a stock system for table B1:
>
> create table b1 (
>        c1 varchar2(15 byte) not null enable,
>        c158 varchar2(255 byte),
>        co158 number(15,0),
>        cc158 number(15,0))
> /
> create unique index ib1 on b1 (c1)
> /
>
> While this table has a unique constraint through index ib1, it does
> not have a primary key defined.  Compare this to the DDL for the same
> table with the primary key constraint:
>
> create table b1 (
>        c1 varchar2(15 byte) not null enable,
>        c158 varchar2(255 byte),
>        co158 number(15,0),
>        cc158 number(15,0),
>        constraint sys_pk_3933 primary key (c1)
> /
> create unique index ib1 on b1 (c1)
> /
>
> We looked to add this to the ardb.conf at the time a form is created,
> but that is a no go because the ardb.conf entries only append a suffix
> to the create table statements, at this position:
>
> create table X (columns...) <ardb.conf clause goes here>
> /
>
> This is great for storage parameters, partitioning, etc., but not so
> good for constraints.  It also sounds like the ardb.conf is obsolete,
> for all intents and purposes, since Remedy no longer drops/recreates
> the underlying tables, thus making manual modifications to the
> underlying tables characteristics persistent (safer).
>
> Thanks for taking the time to look through the code and send this
> information.  It is immensely useful and gives us the information we
> need to make the correct decision on going forward.
>
> Regards,
> Axton Grams
>
> On Mon, Feb 27, 2012 at 2:48 PM, Mueller, Doug <[email protected]> wrote:
>> Axton,
>>
>> By the way....
>>
>> On the other topic in your message, definition of a primary key.
>>
>> We found that a number of the replication technologies require a table to 
>> have
>> a primary key in order to replicate successfully.  Since every one of our 
>> tables
>> has a primary key -- the entry ID -- and we can define combinations of fields
>> for other forms -- like status history -- that are unique, we have added a
>> primary key to every metadata table and all the data tables for things we
>> install or create going forward.  I don't think we retrofit the DB to add 
>> them
>> to existing installations.
>>
>> This work was done in the 7.5 or so timeframe (before, at, or after I am not
>> sure, but in the range of the three releases just before, at, or after 7.5).
>>
>> No issue if you want to create something else as your primary key, but just 
>> be
>> aware of the fact that the environment does create a primary key for all 
>> tables
>> now so that it is present and defined for any environment where DB 
>> replication
>> requires this capability.
>>
>> So, you may want to check to see if there is already a primary key defined 
>> and
>> maintained for you.  Then, you can decide whether this is sufficient or do 
>> you
>> need to do something different for your situation.  Just be clear that you 
>> may
>> need to undo the primary key specification in your work as we should already 
>> be
>> doing one.  This was added in that range of just before, at, or just after 
>> the
>> 7.5 release.  If before or at, you have already seen/addressed this 
>> situation.
>> If after, just be aware that this is coming and may have some impact on you 
>> in
>> the future.
>>
>> Doug Mueller
>>
>> -----Original Message-----
>> From: Action Request System discussion list(ARSList) 
>> [mailto:[email protected]] On Behalf Of Axton
>> Sent: Monday, February 27, 2012 7:53 AM
>> To: [email protected]
>> Subject: Remedy Table Recreation
>>
>> First, some background information:
>> It used to be the case that certain operations would trigger Remedy to
>> recreate a database table:
>> - rename existing table
>> - create new table with the original name
>> - copy the data from the renamed table to the new table
>> - drop the renamed table
>>
>> I remember altering the precision on a decimal field would trigger
>> this, and I seem to also remember something with currency fields.
>>
>> Now for the issue:
>> We have applied changes to every table in the Remedy database to
>> define a primary key.  This primary key is used for Oracle Streams
>> replication to a target database.  If the table is recreated, the
>> primary key is dropped, which can cause Streams to choke if the table
>> contains a large volume of data.
>>
>> Now for the question:
>> Does anyone know of an action that a user can perform through the
>> Remedy clients that will cause a table to be recreated in this manner?
>>  When I say "Remedy Clients" I am referring to Dev Studio, User Tool,
>> ITSM applications, mid-tier, or the Remedy API.
>>
>> Relevant Environment Information:
>> - Oracle 11g
>> - ARServer 7.5
>> - Apps 7.5 (ITSM, CMDB, etc.)
>>
>> Thanks,
>> Axton Grams
>>
>> _______________________________________________________________________________
>> 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"

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

Reply via email to