Wednesday, 26 September 2012

JDEdwards and the move from windoze

Good on oracle for making another cool move away from windoze.  Their new server manager console is now available on other platforms.  I noticed in change assistant that you can download the SUN, LINUX or INTEL version of server manager console in 9.1.2.0.  That is nice!

image

I’m trying to think of what is next to kill off the reliance on windows…  Well, it’s going to be that pesky fat client.  Let’s be honest, that is not going to go away in a hurry.  But what if you did not need a fat client.  If you were not creating DLL’s locally or more specifically you were not creating DLL’s that needed to be used on client machines – there is NO reason that you need a wintel deployment server.  I’m quite doubtful that FDA and RDA are going to be written in JAVA, but stranger things have happened.

We need to think that if JDEdwards could have it’s time again, there would be no thick client on windows (knowing what it knows now).  You’d be using JDeveloper as your IDE.  I guess that is one of the nice things about JDEdwards though, it’s got an eclectic pedigree.

R9698711 and bulk table creation and maybe some R9698713 - R98403G

Okay, I’m tired of waiting for enhancements.  I know that this is an area fraught with danger, so please tread carefully.  Run things in proof mode first… etc etc.  Note that there is an enhancement rumour that will make this a 1 step process, but for the time being you might want to follow this.

I’ve been in this situation a number of times and thought I’d let you know what I do with it.  You run R9698711 (bless it’s cotton socks) and you get a large pile of rubbish come out the other end.  You are thinking, hey, E1 works fine – what is all of this rubbish…  It’s generally a result of ESU’s not generating tables, you not following special instructions and a plethora of other reasons.  You might also say that you don’t care much for “SPC Certificate Holding Table - UK – 43”, and I gotta be honest  - neither do I.  The problem is that when your site gets audited by another support organisation, this is the first thing that is picked apart (hey – I do it myself!).

Okay, back to the problem.  You get a huge list of table with problems – what are you going to to?

Remember what this report is doing, it’s comparing the specs to physical tables and making sure they are consistent.  This is for all tables & indexes.  Cool report!

step 1:  run the report to csv and load the csv into excel

step2:  look at all of the tables that have 0 rows and generate them all – how?

step3:  use my previous post about setting up quick data select and use the following formula in the spreadsheet:

image

=+CONCATENATE("objshell.sendkeys """,A2,"   %(a)""")

use the results column and past it into a InsertDSQuickly.vbs file – note that the header looke like below

set objShell = wscript.createobject("WScript.Shell")

Do until success = True
  Success = objshell.AppActivate("List Of Values")
  wscript.sleep 1000
Loop
wscript.sleep 100

objshell.sendkeys "+{TAB}+{TAB}"

objshell.sendkeys "A0005   %(a)"
objshell.sendkeys "A0006   %(a)"
objshell.sendkeys "A0009   %(a)"
objshell.sendkeys "A0010   %(a)"

This will almost complete your script for adding all of the data selection items for R98403G – this is the golden nugget of information.  You need to use this report, there are a pile of others out there, but they rely on the tables existing somewhere, and if they do not – you are stuck .

It has super simple processing options too:

image

Step 4: call up the data selection windows for R98403G, select object name and select list of values, then run your script.  This will efficiently type ALL missing tables in the data selection list and allow you to claim that you gen’d them all manually and it took you days.

image

The R98403G will then gen all your tables depending on the PO’s that you set.

I was able to clean up 363 entries in one swoop!

R9698713 -  will fix the indexes – not the base tables.  This would be your second sweep.  You fix all of the 0 record tables first (hey this makes total sense, if the specs are wrong it’s gunna be hard to get data into them).  Then run the R9698713 report to fix the indexes.

Tuesday, 25 September 2012

Tools 9.1 update 2–what is new?

9.1.2 is out and our demo site is about to be furnished with all of the new content.  The following is a summary of what oracle have included in the release:

1. Continued enhancement of end user experience

  1. breadcrumbs (also in 9.1.0.4)
  2. task folders in carousel - nice
  3. create favourites from running apps – finally
  4. carousel personalisation
  5. RIA improvements
  6. E1 portlets within an E1Page

2. Additional Platform Choices

  1. Oracle DB 11.2.0.3 cert
  2. windows 2008 R2 cluster support
  3. Firefox 10ESR

3. simplify upgrade and implementation

  1. application configuration analyser
  2. Custom object analyser
  3. optimised index build for TCs
  4. Batch media object conversion from RTF to HTML

4. Productivity

  1. Java API for XML web services
  2. Media object APIs for web services
  3. Dynamic table cache refresh
  4. Form Design Aid improvements
  5. Improvements to E1 page generator

Sunday, 23 September 2012

kerberos and samba for OEL

Actually, what are we trying to achieve.  I have a linux enterprise server and I want my users to be able to put and get interoperability files to this machine.  Right, I want it to be secure too, I want to be able to control it.  So I probably need samba for sharing and then some moire tricks for authentication to MAD.  I need to get samba working for an OEL box.  To get SAMBA working, I want to use domain credentials.  Let’s be honest, doing linux properly involves using LDAP for credential handling.

setting up samba and winbind for windows credential handling in linux.
so u have a share in linux that you want to expose to windoze land, easy...  kerberos, samba and winbind will help you.

First, get kerberos working... how?
vi /etc/krb5.conf


[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = MYDOMAIN.LOCAL   <- you define this later
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes

[realms]
MYDOMAIN.LOCAL = {    <-this is the one that you defined, your LDAP servers
  kdc = ssydads01.MYDOMAIN.local
  admin_server = ssydads01.MYDOMAIN.local
  default_domain = MYDOMAIN.local
  kdc = ssydads01.MYDOMAIN.local
}

[domain_realm]  <-set up some aliasing
.MYDOMAIN.local = MYDOMAIN.LOCAL
MYDOMAIN.local = MYDOMAIN.LOCAL

[appdefaults]
pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}

But what now, you need to ensure that you have the latest packages for winbind etc.
you'll need samba 3.6.7, well at least - I did and so did Geoff!
Geoff has kindly told me which order to install / Update packages in with the handy little addendum:

  • rpm -ivh libwbclient0-3.6.7-44.el5.x86_64.rpm
  • rpm -Uvh libsmbclient0-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh libsmbclient-devel-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh libwbclient-devel-3.6.7-44.el5.x86_64.rpm
  • rpm –ivh –replacepkgs –replacefiles samba3-client-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh –replacepkgs –replacefiles samba3-winbind-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh –replacepkgs –replacefiles samba3-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh –replacepkgs –replacefiles samba3-utils-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh samba3-doc-3.6.7-44.el5.x86_64.rpm
  • rpm -ivh samba3-debuginfo-3.6.7-44.el5.x86_64.rpm

Note that you will not need all of the –replacepkgs if you first uninstall samba

Once this has been done right, you should be able to kinit command.  Note that this is your CaSe sensitive realm name from krb5.conf

kinit user@REALM
kinit shannon@MYDOMAIN.LOCAL

The system will ask you for a password - nice!
So now that you have kerberos functional, time to get winbind and samba working

service smb restart to restart all of your smb related services

using:

> net ads testjoin

you’ll probably get:

ads_connect: No logon servers
Join to domain is not valid: No logon servers

That is because you need to fill out your SMB.conf file.

vi /etc/samba/smb.conf

#Global parameters
[global]
        security = ads
        realm = MYDOMAIN.LOCAL
        max protocol = smb2
        server string = VSYDJDE04
        workgroup = MYDOMAIN
        netbios name = VSYDJDE04
        encrypt passwords = Yes
        auth methods = guest winbind:ntdomain  <--help you use windoze permissions on share
        # guest account = guest
        max xmit = 65535
        name resolve order = wins host
        socket options = TCP_NODELAY SO_RCVBUF=131072 SO_SNDBUF=131072
        os level = 16
        preferred master = No
        domain master = No
        local master = No
        use sendfile = No
        unix charset = UTF8
        winbind use default domain = yes
        create mask = 0700
        directory mask = 0700
        aio read size = 65536
        aio write size = 65536
       #  aio read size = 32768
       #  aio write size = 32768

idmap config * : range = 10000-20000
idmap config * : backend = tdb
idmap config MYDOMAIN : default = yes
idmap config MYDOMAIN : range = 100000-200000
idmap config MYDOMAIN : backend = rid


[test2]
        path = /test
        available = yes
        browseable = yes
        follow symlinks = yes
        read only = no
        public = yes
        max connections = 0
[interop]
        path = /u01/app/jdedwards/interop
        available = yes
        browseable = yes
        follow symlinks = yes
        read only = no
        public = yes
        max connections = 0

 

service smb restart

then:

> net ads join -U domainusername

and enter your password.

net ads join -U smoir
Enter smoir's password:
Using short domain name – MYDOMAIN
Joined 'VSYDJDE03' to realm 'mydomain.local'

if this has all worked, you have all of the net ads commands at your fingertips.  Remember that if you are logged in as root, you’ll need to append –U username to all of your net ads commands – otherwise it’s going to try and authenticate root to the domain.

net ads info            Display details on remote ADS server
net ads join            Join the local machine to ADS realm
net ads testjoin        Validate machine account
net ads leave           Remove the local machine from ADS
net ads status          Display machine account details
net ads user            List/modify users
net ads group           List/modify groups
net ads dns             Issue dynamic DNS update
net ads password        Change user passwords
net ads changetrustpw   Change trust account password
net ads printer         List/modify printer entries
net ads search          Issue LDAP search using filter
net ads dn              Issue LDAP search by DN
net ads sid             Issue LDAP search by SID
net ads workgroup       Display workgroup name
net ads lookup          Perfom CLDAP query on DC
net ads keytab          Manage local keytab file
net ads gpo             Manage group policy objects
net ads kerberos        Manage kerberos keytab

so, i can run net ads user –U smoir, enter my password and get a listing of the domains users!  cool!

you could use "system-config-authentication" for a gui interface, but it's not going to give you all of the options and will write to the afore and after mentioned

As you may have guessed, the final two stanza’s in smb.conf are the dirs that I’m sharing:

[test2]
path = /test
available = yes
browseable = yes
follow symlinks = yes
read only = no
public = yes
max connections = 0
[interop]
path = /u01/app/jdedwards/interop
available = yes
browseable = yes
follow symlinks = yes
read only = no
public = yes
max connections = 0

settings are pretty self explanatory, from windoze – I see

image

Tuesday, 18 September 2012

Index Advisor and JDEdwards performance on the AS/400

This is an easy job that can bear a lot of fruit for the AS/400 – Index rationalisation.

Firstly, run some performance monitors over the 400 and trace activity for an hour or two.  For a busy system this could easily write 4GB an hour of logs to your trace file.

View the summary of these traces and look at your read and write / statement ratios

image

Look at your select to insert and update ratios and get a general feel how you might benefit from more indexes (generally you will).  The above shows a fairly normal read:write ratio of 20:1.

You can go through the details of these files and look for the indexes that the 400 had to make on the fly (fix them) and look at the index recommendations that comes from the period, you can easily generate them.

BUT, here is the best thing that the 400 offers – add your production library into the schemas that you see user database, databasename.

image

This will be recording (depending on certain system settings and OS release levels) ALL recommended indexes for that library since the beginning of time (perhaps not literally, but I think that the 400 has been around for that long, well perhaps not literally – hehe).

image

Right click the library / schema that you want to see the indexes advisements for and choose “Index advisor”.

It shows you the following:

image

Holy moly, that is totally AWESOME for tuning.  Create the indexes that you want with another SIMPLE right click “create index”

image

Don’t stress, create index does not just create the index, you gotta name it and do a few other things.  You get the screen above.  You can then copy the details out (Show SQL)

/* Creating index PRODDTA.F4108_SRM01
Sort Sequence: None (Sort by hexadecimal value) */
CREATE INDEX PRODDTA.F4108_SRM01 ON PRODDTA.F4108 (IOMCU ASC , IOLOTN ASC , IODOCO ASC );

Wow, this has been recommended 60 billion times, I might just add it!

Remember to di this for ALL libraries that might get used.  You’ll be surprised when doing it for SY900, SVM900, PRODCTL, DD900 and OL900 ! 

Brace yourself for a faster system.

Reset all of the stats and do it again a few months later.

Extra for Experts! http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzajq%2Fidxadvisor.htm

The index advisor information can be found in the Database Monitor view 3020 - Index advised (SQE).

The advisor information is stored in columns QQIDXA, QQIDXK and QQIDXD. When the QQIDXA column contains a value of 'Y' the optimizer is advising you to create an index using the key columns shown in column QQIDXD. The intention of creating this index is to improve the performance of the query.

In the list of key columns contained in column QQIDXD the optimizer has listed what it considers the suggested primary and secondary key columns. Primary key columns are columns that should significantly reduce the number of keys selected based on the corresponding query selection. Secondary key columns are columns that may or may not significantly reduce the number of keys selected.

Column QQIDXK contains the number of suggested primary key columns that are listed in column QQIDXD. These are the left-most suggested key columns. The remaining key columns are considered secondary key columns and are listed in order of expected selectivity based on the query. For example, assuming QQIDXK contains the value of 4 and QQIDXD specifies 7 key columns, then the first 4 key columns specified in QQIDXK is the primary key columns. The remaining 3 key columns are the suggested secondary key columns.

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzajq%2Fidxadvisor.htm

Create View QQQ3020 as 
(SELECT QQRID as Row_ID,
QQTIME as Time_Created,
QQJFLD as Join_Column,
QQRDBN as Relational_Database_Name,
QQSYS as System_Name,
QQJOB as Job_Name,
QQUSER as Job_User,
QQJNUM as Job_Number,
QQI9 as Thread_ID,
QQUCNT as Unique_Count,
QQUDEF as User_Defined,
QQQDTN as Unique_SubSelect_Number,
QQQDTL as SubSelect_Nested_Level,
QQMATN as Materialized_View_Subselect_Number,
QQMATL as Materialized_View_Nested_Level,
QVP15E as Materialized_View_Union_Level,
QVP15A as Decomposed_Subselect_Number,
QVP15B as Total_Number_Decomposed_SubSelects,
QVP15C as Decomposed_SubSelect_Reason_Code,
QVP15D as Starting_Decomposed_SubSelect,
QQTLN as System_Table_Schema,
QQTFN as System_Table_Name,
QQTMN as Member_Name,
QQPTLN as System_Base_Table_Schema,
QQPTFN as System_Base_Table_Name,
QQPTMN as Base_Member_Name,
QVPLIB as Base_Table_Schema,
QVPTBL as Base_Table_Name,
QQTOTR as Table_Total_Rows,
QQEPT as Estimated_Processing_Time,
QQIDXA as Index_is_Advised,
QQIDXD as Index_Advised_Columns_Short_List,
QQ1000L as Index_Advised_Columns_Long_List,
QQI1 as Number_of_Advised_Columns,
QQI2 as Number_of_Advised_Primary_Columns,
QQRCOD as Reason_Code,
QVRCNT as Unique_Refresh_Counter,
QVC1F as Type_of_Index_Advised,
QQNTNM as NLSS_Table,
QQNLNM as NLSS_Library
FROM UserLib/DBMONTable
WHERE QQRID=3020)
 

OMC OMW promoting F95625 and F95626 records

If you are using some of the more advanced bursting functionality, different email subject lines and or email delivery setup – it’s probably best that you know that you cannot promote this with OMW or define the promotions with OMC.  You’ll need to manually copy the records between your control table environments.  I happened to spend some time trying to solve this for a client today, and then found this reference.

see oracle Bug 11054826 : OMW TRANSFER F95625 F95626 - SAR: 8975106

Friday, 7 September 2012

Have you got big data in JDE… Maybe…

I think big data is measured in TB, especially when it comes to OLTP.  I know that people might disagree, but that’s what I think.  I’m sure that it’s bigger for BI and even bigger for social media feeds, but for me – managing TB’s of OLTP data gives some head aches.

I’ve blogged before on large tables in JDE, and how large their requisite indexes are.  Here is an AS/400 example

  • F0911 90GB
  • F0911_1 6GB
  • F0911_28 6GB

So, 90GB of data and around 140 GB of indexes for F0911.  This is with 610GB of data.  A fairly normal mix I’m here to say!  I feel for the web server if someone wants to “scroll to the end” of the F0911 table in data browser – ouch!  That’s going to crash.

Thursday, 6 September 2012

more detail on BSSV 9.1.0.4 not starting with WLS 10.3.5.0 on unix

I’ve blogged this already, but thought that I’d provide a little more detail.

When you deploy your package to the server, everything goes a little pear shaped.  So I told you to edit the config.xml file for the domain and add a class-path entry.

The file looks like this before:

<server>
  <name>BSSV_PD900</name>
  <ssl>
    <enabled>true</enabled>
    <listen-port>9701</listen-port>
  </ssl>
  <machine>vsydwls02</machine>
  <listen-port>9700</listen-port>
  <server-start>
    <arguments>-Ddefault_path=/u01/app/oracle/e1Agent/SCFHA/targets/BSSV_PD900/config</arguments>
  </server-start>
</server>

And after:L

<server>
<name>BSSV_PD900</name>
<ssl>
<enabled>true</enabled>
<listen-port>9701</listen-port>
</ssl>
<machine>vsydwls02</machine>
<listen-port>9700</listen-port>
<server-start>

<class-path>/u01/app/oracle/Middleware/wlserver_10.3/server/adr/ojdbc6.jar</class-path>
<arguments>-Ddefault_path=/u01/app/oracle/e1Agent/SCFHA/targets/BSSV_PD900/config</arguments>
</server-start>
</server>

save and exit.  restart AdminServer You should be now good to go!

boot.properties restarting WLS without prompts. Booting OVM guests automatically

I know there are write ups everywhere.  I’m responsible for a couple of them too.  I generally write things up when I’m having to actually do some consulting – hence the barrage of emails.

I want my WLS servers to start automatically and I conscious of constantly putting passwords around in /etc/init.d files to get things starting.  Imagine what is going to happen when a password needs to change…  Arrgghh.

So, when looking up this problem on https://support.oracle.com the entry was handy, but not complete.  Here is my attempt:

goto your domains root dir, something like below

/u01/app/oracle/Oracle/Middleware/user_projects/domains/mydomain

cd servers and get a listing

This will tell you the servers that you have installed on this machine:

drwxr-x--- 7 oracle oinstall 4096 Jun  6 16:52 91BSSV
drwxrwxrwx 7 oracle oinstall 4096 May 25 14:11 AdminServer
drwxrwxrwx 3 oracle root     4096 Aug  1 21:27 domain_bak
drwxr-x--- 7 oracle oinstall 4096 Jun 15 09:37 JDE91_BSSV_DV
drwxrwxrwx 8 oracle oinstall 4096 May 25 17:17 JDE91DV
drwxr-x--- 8 oracle oinstall 4096 Aug  1 20:05 JDE91DV_OAM
drwxr-x--- 7 oracle oinstall 4096 Aug  1 18:42 JDE91DVSSO
drwxrwxrwx 3 oracle oinstall 4096 May 25 14:43 myserver

So, you have the opportunity of not entering a password when starting any of these..  you need to go into the SERVERNAME/security dir and create a boot.properties file

When u first create it, you enter the following

username=weblogic

password=your_wls_password

The first time the server starts with this information, it’ll encrypt the entries – so you do not have to mess with them again.  Then – you’ll also be able to do all of your weblogic ini.d’s without entering credentials.  Phew, that is a relief.

But I now have another problem at another level.  I want my VM’s to restart when my OVM host restarts…  How am I going to get this done.

image

See below I’ve kindly offered oracle the intel that they need to get this functionality into the product.  How ‘bout a check box to say “autostart”?  I bet VMWare does it!

So, this is what we need to do:

https://forums.oracle.com/forums/thread.jspa?messageID=2241442

for now, Oracle VM does not do auto restart vm. but you can employ the xen built-in mechanism.

This is on your OVM host machine

[root@MYRSVMH5D ~]# service xendomains status
[root@MYRSVMH5D ~]# ins:                                   [  OK  ]

1) make sure service xendomains is started.
chkconfig xendomains on

[root@MYRSVMH5D ~]# chkconfig --list xendomains
xendomains      0:off   1:off   2:off   3:on    4:on    5:on    6:off

You’d remember this from a previous post – your level definitions.

Code    Information
0    Halt
1    Single-User mode
2    Multi-user mode console logins only (without networking)
3    Multi-User mode, console logins only
4    Not used/User-definable
5    Multi-User mode, with display manager as well as console logins (X11)
6    Reboot

In my example, we are good to go.  xendomains is starting automatically.  So, now all I need is the symlink to the vm.cfg in /etc/xen/auto to get them starting auto!  Nice.

2) make a link in /etc/xen/auto/ to the vm.cfg


Note that this is a bit messy, because of the crazy names in the virtual machine dirs…

in dir /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines

drwx------ 2 root root 3896 Apr 12 10:37 0004fb00000600001a1a2aeeb16bdb13
drwx------ 2 root root 3896 May  2 19:01 0004fb00000600001efbd53119c02772
drwx------ 2 root root 3896 Apr 11 21:20 0004fb000006000033640d175785768c
drwx------ 2 root root 3896 Aug 14 10:20 0004fb00000600003c194abb88f4d98f
drwx------ 2 root root 3896 Apr 12 10:43 0004fb000006000046b4d76fefb4f810
drwx------ 2 root root 3896 May 30 12:49 0004fb000006000052e2fefa48d85144
drwx------ 2 root root 3896 Apr 12 10:39 0004fb0000060000551f25a281e74b7e
drwx------ 2 root root 3896 Apr 12 10:36 0004fb000006000059953908390579ec
drwx------ 2 root root 3896 Apr 12 10:35 0004fb000006000088f6d611554a2d1c
drwx------ 2 root root 3896 Apr 12 10:41 0004fb000006000092018bb8ea1f02ca
drwx------ 2 root root 3896 Aug 14 11:27 0004fb0000060000921cad8357279178
drwx------ 2 root root 3896 Apr 12 10:38 0004fb000006000097f91be6085ea277
drwx------ 2 root root 3896 May 24 19:59 0004fb0000060000b9eb8c9ebed064bd
drwx------ 2 root root 3896 Apr 12 10:36 0004fb0000060000bcf3ee0f0ec3db82
drwx------ 2 root root 3896 May 20 19:48 0004fb0000060000ed81741bfc2fc727
drwx------ 2 root root 3896 Jul  2 11:30 0004fb0000060000f45d2aa20cdf6c44
drwx------ 2 root root 3896 Apr 12 10:38 0004fb0000060000fd1500d07f440918

So, I execute the following to find the simple machine name, telling me what is what…  Then I can calso create the sym links easier

find . -name vm.cfg -exec grep -i -H OVM_Simple_name {} \;

./0004fb000006000088f6d611554a2d1c/vm.cfg:OVM_simple_name = 'E1DEV2'
./0004fb00000600003c194abb88f4d98f/vm.cfg:OVM_simple_name = 'E1BSS'
./0004fb0000060000551f25a281e74b7e/vm.cfg:OVM_simple_name = 'E1DB'
./0004fb000006000092018bb8ea1f02ca/vm.cfg:OVM_simple_name = 'E1ENT'
./0004fb000006000046b4d76fefb4f810/vm.cfg:OVM_simple_name = 'E1WEB'
./0004fb000006000059953908390579ec/vm.cfg:OVM_simple_name = 'E1DEP'
./0004fb0000060000bcf3ee0f0ec3db82/vm.cfg:OVM_simple_name = 'E1DEV'
./0004fb00000600001efbd53119c02772/vm.cfg:OVM_simple_name = 'JDEDEP2'
./0004fb000006000033640d175785768c/vm.cfg:OVM_simple_name = 'MYRSDB05'
./0004fb0000060000fd1500d07f440918/vm.cfg:OVM_simple_name = 'Thingy'
./0004fb00000600001a1a2aeeb16bdb13/vm.cfg:OVM_simple_name = 'cvdvdb'
./0004fb000006000097f91be6085ea277/vm.cfg:OVM_simple_name = 'myrdba'
./0004fb0000060000ed81741bfc2fc727/vm.cfg:OVM_simple_name = 'e1ent2'
./0004fb0000060000b9eb8c9ebed064bd/vm.cfg:OVM_simple_name = 'e1web2'
./0004fb000006000052e2fefa48d85144/vm.cfg:OVM_simple_name = 'e1oid'
./0004fb0000060000f45d2aa20cdf6c44/vm.cfg:OVM_simple_name = 'MYREM12C'
./0004fb0000060000921cad8357279178/vm.cfg:OVM_simple_name = 'e1sec'

ok, how about we get that command to create the symbolic links?  easy too!  Well, maybe no so easy…  Use the following command to generate the sym links and use proper names for them.  Execute the results!

find . -name vm.cfg -exec grep -i -H OVM_Simple_name {} \; |awk -F: '{printf("ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/%s %s\n",$1,$2)}' | awk '{printf("%s %s %s /etc/xen/auto/%s\n", $1, $2, $3, $6)}' | sed "s/'//g"

[root@MYRSVMH5D VirtualMachines]# find . -name vm.cfg -exec grep -i -H OVM_Simple_name {} \; |awk -F: '{printf("ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/%s %s\n",$1,$2)}' | awk '{printf("%s %s %s /etc/xen/auto/%s\n", $1, $2, $3, $6)}' | sed "s/'//g"
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000088f6d611554a2d1c/vm.cfg /etc/xen/auto/E1DEV2
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600003c194abb88f4d98f/vm.cfg /etc/xen/auto/E1BSS
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000551f25a281e74b7e/vm.cfg /etc/xen/auto/E1DB
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000092018bb8ea1f02ca/vm.cfg /etc/xen/auto/E1ENT
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000046b4d76fefb4f810/vm.cfg /etc/xen/auto/E1WEB
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000059953908390579ec/vm.cfg /etc/xen/auto/E1DEP
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000bcf3ee0f0ec3db82/vm.cfg /etc/xen/auto/E1DEV
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600001efbd53119c02772/vm.cfg /etc/xen/auto/JDEDEP2
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000033640d175785768c/vm.cfg /etc/xen/auto/MYRSDB05
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000fd1500d07f440918/vm.cfg /etc/xen/auto/Thingy
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600001a1a2aeeb16bdb13/vm.cfg /etc/xen/auto/cvdvdb
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000097f91be6085ea277/vm.cfg /etc/xen/auto/myrdba
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000ed81741bfc2fc727/vm.cfg /etc/xen/auto/e1ent2
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000b9eb8c9ebed064bd/vm.cfg /etc/xen/auto/e1web2
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000052e2fefa48d85144/vm.cfg /etc/xen/auto/e1oid
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000f45d2aa20cdf6c44/vm.cfg /etc/xen/auto/MYREM12C
ln -s /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000921cad8357279178/vm.cfg /etc/xen/auto/e1sec

As you see we are done.  I then delete the machines that I do not care to autostart

[root@MYRSVMH5D VirtualMachines]# ls -l  /etc/xen/auto
total 68
lrwxrwxrwx 1 root root 108 Sep  6 10:39 cvdvdb -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600001a1a2aeeb16bdb13/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1BSS -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600003c194abb88f4d98f/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1DB -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000551f25a281e74b7e/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1DEP -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000059953908390579ec/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1DEV -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000bcf3ee0f0ec3db82/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1DEV2 -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000088f6d611554a2d1c/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1ENT -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000092018bb8ea1f02ca/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 e1ent2 -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000ed81741bfc2fc727/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 e1oid -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000052e2fefa48d85144/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 e1sec -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000921cad8357279178/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 E1WEB -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000046b4d76fefb4f810/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 e1web2 -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000b9eb8c9ebed064bd/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 JDEDEP2 -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb00000600001efbd53119c02772/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 myrdba -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000097f91be6085ea277/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 MYREM12C -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000f45d2aa20cdf6c44/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 MYRSDB05 -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb000006000033640d175785768c/vm.cfg
lrwxrwxrwx 1 root root 108 Sep  6 10:39 Thingy -> /OVS/Repositories/0004fb00000300005dbf9d7f41f5d4c1/VirtualMachines/./0004fb0000060000fd1500d07f440918/vm.cfg

Wednesday, 5 September 2012

debugging compile and link problems for JDE on linux

The compilation & link process on linux for JD Edwards is pretty simple at the end of the day.

The package build process on the deployment server (or thick client) sends over all of the C and include files into $EVRHOME/packages/<packagename> folder.  All of the source files are separated by DLL name, this is handy when linking source files back to DLL name.

Once this is done, the deployment server instructs the package build kernel to start compiling and then linking.

JDE.INI file settings are read for these commands, so it gives you a chance to add in your own libraries if you are compiling them in on the server – nice!

[BSFN BUILD]
BuildArea=/u01/jdedwards/e900/packages
OptimizationFlags=-O3 -fno-strict-aliasing
DebugFlags=-g -D_DEBUG -DJDEDEBUG
InliningFlags=
DefineFlags=-DKERNEL -DPRODUCTION_VERSION -DNATURAL_ALIGNMENT -D_GNU_SOURCE
#CompilerFlags=-fPIC -Wall -m32 -c
CompilerFlags=-fPIC -m32 -c
OSReleaseLevel=
LinkFlags=-melf_i386 -shared -L/u01/jdedwards/e900/system/lib -ljdesaw -z muldefs
LinkLibraries=
SimultaneousBuilds=5

 

Sample INI file section above

All Compile logs are written to $EVRHOME/packages/<packagename>/CompileLogs/DLLNAME/source.err

To view all of the errors at compile time, enter a command like “find $EVRHOME/packages/packagename  –name *.err –exec more {} \;

Note that if you use package build history, they’ll be appended too – which is sometimes a pain. change the –exec more {} \; to rm –f {} \; to delete them all for a a retry.

You generally get problems with includes or missing DSTR items in these logs.

A compile command in JDE looks something like:

cc -fPIC -m32 -c -O3 -fno-strict-aliasing  -DKERNEL -DPRODUCTION_VERSION -DNATURAL_ALIGNMENT -D_GNU_SOURCE -DUSESPECIALGPA4BB -DUSETABLEHEADERFROMINCLUDEA   -I/u01/jdedwards/e900/packages/PD900FB/include/  -I/u01/jdedwards/e900/system/include  -I/u01/jdedwards/e900/system/include/xml  -I/u01/jdedwards/e900/system/includev '

Then

'cc -E -fPIC -m32    -O3 -fno-strict-aliasing  -DKERNEL -DPRODUCTION_VERSION -DNATURAL_ALIGNMENT -D_GNU_SOURCE -DUSESPECIALGPA4BB -DUSETABLEHEADERFROMINCLUDEA   -I/u01/jdedwards/e900/packages/PD900FB/include/  -I/u01/jdedwards/e900/system/include  -I/u01/jdedwards/e900/system/include/xml  -I/u01/jdedwards/e900/system/includev '.

Linking

This is more problematic on linux.  There are quite a few issues on support.oracle.com about this. 

At the end of the day, JDE runs a command like the following to kick off the compile and link, you can do this yourself to QUICKLY test changes that you make to the ini or includes on the server.  Note that any changes to the JDE.INI will be read immediately by this command, because it’s a new process.

builddll /u01/jdedwards/e900/packages/PD900FB/text/JDBTRG3.txt

It writes status to:

/u01/jdedwards/e900/packages/PD900FB/text/JDBTRG3.sts

It writes logs to

builddll /u01/jdedwards/e900/packages/PD900FB/text/JDBTRG3.log

So, once all of the compiling is complete, it runs the link for all the .o’s that it’s created:

'ld -melf_i386 -shared -L/u01/app/jdedwards/e900/system/lib -ljdesaw -z muldefs -o /u01/jdedwards/e900/packages/PD900FB/bin32/libJDBTRG4.so *.o >> JDBTRG4.log 2>&1'

Pretty simple hey.  You can manually run any of these commands to check out which of your settings are not right in the JDE.INI and fix them

Monday, 3 September 2012

DB links and RAC

You learn something new every day.

I followed my previously used simple guide to creating DB links and now get a new oracle error when using the link – not on creation:

I’m signed into e1test and creating a link to e1prod.

 

create public database link "jde_e1prod"
connect to JDE
identified by r1PP3Rpasswd
using 'e1prod';

A couple things about the statement above.  Ripper password hey?  Also, I like to user the user I connect as in the link name, helps out later on.

 

Error starting at line 1 in command:
INSERT INTO DV900.F983051 SELECT * FROM DV900.F983051@e1prod
Error at Command Line:1 Column:54
Error report:
SQL Error: ORA-02085: database link E1PROD.OSL.LOCAL connects to E1PROD
02085. 00000 -  "database link %s connects to %s"
*Cause:    a database link connected to a database with a different name.
           The connection is rejected.
*Action:   create a database link with the same name as the database it
           connects to, or set global_names=false.

I can only guess that this means there is a problem between the actual RAC node that I’m talking to and the generic name of the database.  This is my assumption from running:

SELECT INSTANCE_name from v$instance;

And getting something like:

e1test2 (but my instance is e1test).

A quick google shows me: Option 1:

names.default_domain = domain.com

But what about the ramifications?  Option 2:

alter system set global_names=false;

Same question

I went for the second option, and viola – it worked.  Thank you google and thank u oracle.

Extending JDE to generative AI