Thursday, December 22, 2011

Informatica: SQLException: [informatica][Oracle JDBC Driver]String index out of range: -1

This is an error that can drive you insane since it is not as explenatory as it should be and you can loose many hours tracing the cause of it or (like in my case) even in reinstalling the server.

Cause:

Its merely an issue in host name resolving. Informatica tries to get the hostname and the substring it in order to ommit the domain name. If it fails to do so returns an ambiguous error that is probably due to some kind of substring failure.

Thus if you encounter this kind of behavior change the hosts file in order to include the real network IP of the informatica Host machine

Resolution

The hosts file includes only one line that referenced the hosts's network IP:

  nnn.nnn.nn.n Full_hostname (domain)

  The loopback interface entry is missing, thus you must add the following entry:

 127.0.0.1 Hostname (Name Only)

Powercenter without any hotfix is working even without the loopback entry. So I guess that the problem is some kind of substring command that was failing due to empty string at Hostname resolving.

Monday, December 5, 2011

Informatica PowerCenter Repository Queries

Here are some repository queries that may come handy:


How to find all the mappings and sessions which have PARALLEL hints in the SQL Override


SELECT S.SUBJ_NAME, M.MAPPING_NAME, W.WIDGET_NAME, A.WIDGET_ID, W.VERSION_NUMBER,
SUBSTR(A.ATTR_VALUE, 1, 60) ATTR_VALUE
FROM OPB_WIDGET_ATTR A, OPB_WIDGET W, OPB_SUBJECT S, OPB_WIDGET_INST I, OPB_MAPPING M
WHERE A.WIDGET_ID = W.WIDGET_ID
AND W.IS_VISIBLE = 1
AND A.VERSION_NUMBER = W.VERSION_NUMBER
AND A.WIDGET_TYPE IN(2, 3, 11) --Limit to Src/Tgt/Lkp Transformations
AND W.WIDGET_ID = I.WIDGET_ID
AND W.VERSION_NUMBER = I.VERSION_NUMBER
AND I.MAPPING_ID = M.MAPPING_ID
AND I.VERSION_NUMBER = M.VERSION_NUMBER
AND W.SUBJECT_ID = S.SUBJ_ID
AND UPPER(A.ATTR_VALUE) LIKE '%PARALLEL%'
UNION
SELECT S.SUBJ_NAME, W.TASK_NAME||'.'||TI.INSTANCE_NAME TASK_NAME, 'SQL Override' WIDGET_NAME,
A.SESS_WIDG_INST_ID, TI.VERSION_NUMBER, SUBSTR(A.ATTR_VALUE, 1, 60) ATTR_VALUE
FROM OPB_SWIDGET_ATTR A, OPB_TASK_INST TI, OPB_TASK W, OPB_SUBJECT S
WHERE A.SESSION_ID = TI.TASK_ID
AND A.VERSION_NUMBER = TI.VERSION_NUMBER
AND TI.WORKFLOW_ID = W.TASK_ID
AND TI.VERSION_NUMBER = W.VERSION_NUMBER
AND W.IS_VISIBLE = 1
AND W.SUBJECT_ID = S.SUBJ_ID
AND UPPER(A.ATTR_VALUE) LIKE '%PARALLEL%'
ORDER BY 1, 2, 3, 4;

How to turn on Write Backward Compatible Session Log File for all session tasks in a folder

UPDATE OPB_TASK_ATTR A SET A.ATTR_VALUE=1
WHERE A.ATTR_ID=17 -- WBCSLF
-- 102 Write performance data to repository
-- 108 Collect performance data
-- 105 Enable high precision
AND EXISTS (
SELECT 0 FROM OPB_TASK T, OPB_SUBJECT S
WHERE T.TASK_ID = A.TASK_ID
AND T.VERSION_NUMBER = A.VERSION_NUMBER
AND T.IS_VISIBLE = 1
AND T.SUBJECT_ID = S.SUBJ_ID
AND S.SUBJ_NAME LIKE '%Sample%'
)
-- AND A.INSTANCE_ID = 0 -- Reusable Session Only ;

What are today's long-running tasks

select -- the SRC_ROWS may look big if joiner is used
T.SUBJECT_AREA, T.INSTANCE_NAME, TRUNC(AVG(END_TIME-START_TIME)*24, 2) RUN_HOUR,
MIN(T.START_TIME) START_TIME,
SUM(L.SRC_SUCCESS_ROWS) SRC_ROWS, SUM(L.TARG_SUCCESS_ROWS) TGT_ROWS
from REP_TASK_INST_RUN T, OPB_SESS_TASK_LOG L
where T.run_err_code=0 and (T.END_TIME-T.START_TIME)>= 1/24
and T.START_TIME >= TRUNC(SYSDATE)-2/24
and T.INSTANCE_ID = L.INSTANCE_ID
GROUP BY T.SUBJECT_AREA, T.INSTANCE_NAME
Order By RUN_HOUR desc;

Inside the Expression Transformation

select S.SUBJ_NAME, W.WIDGET_NAME, F.WIDGET_ID, F.FIELD_NAME, F.FIELD_ID, E.EXPR_ID, E.VERSION_NUMBER, E.EXPRESSION from OPB_WIDGET W, OPB_SUBJECT S, OPB_WIDGET_FIELD F, OPB_WIDGET_EXPR R, OPB_EXPRESSION E
where W.SUBJECT_ID=S.SUBJ_ID and W.WIDGET_ID=F.WIDGET_ID
and W.WIDGET_ID=R.WIDGET_ID AND F.FIELD_ID=R.OUTPUT_FIELD_ID
and W.WIDGET_ID=E.WIDGET_ID AND R.EXPR_ID=E.EXPR_ID
and W.VERSION_NUMBER = F.VERSION_NUMBER
and F.VERSION_NUMBER = R.VERSION_NUMBER
and R.VERSION_NUMBER = E.VERSION_NUMBER
and W.IS_VISIBLE = 1
and w.WIDGET_NAME like 'EXP_SAMPLE%'
order by S.SUBJ_ID, W.WIDGET_ID, F.FIELD_ID;

Which session populates the specific target table

select SUBJECT_AREA, SESSION_NAME,TARGET_NAME,
MAX(SUCC_ROWS) AS ROWS#, TYPE_ID, COUNT(1) SAMPLE#
from (
select SUBJECT_AREA, SESSION_INSTANCE_NAME SESSION_NAME,
TYPE_ID, SUCCESSFUL_AFFECTED_ROWS SUCC_ROWS,
TABLE_NAME TARGET_NAME
from PM_REPO.REP_SESS_TBL_LOG
WHERE TYPE_ID in (2) -- Target Only
and END_TIME >= TRUNC(SYSDATE-40)
and SUCCESSFUL_AFFECTED_ROWS > 0
and TABLE_NAME like :TGT_NAME||'%' ESCAPE '\'
)
Group By SUBJECT_AREA, SESSION_NAME, TARGET_NAME, TYPE_ID
Order By SUBJECT_AREA, TARGET_NAME, SESSION_NAME ;

How to avoid re-generating & re-transporting ABAP program after slightly changing the mapping

CR 29233 and 63134 have been opened to have fix this problem.
-- Find the current LAST_SAVED and UTC_LAST_SAVED
select m.Mapping_ID, m.VERSION_NUMBER, m.Last_Saved, m.UTC_Last_Saved,
v.User_ID, v.LAST_SAVED, v.UTC_LAST_SAVED, v.COMMENTS,
p.PROGRAM_NAME, p.INSTALL_TIME, p.VERSION_NUMBER ABAP_VERSION_NUM
from opb_mapping m, OPB_VERSION_PROPS v, opb_program_info p
where m.MAPPING_ID = v.OBJECT_ID
and v.OBJECT_TYPE = 21
and m.SUBJECT_ID = v.SUBJECT_ID
and m.VERSION_NUMBER = v.VERSION_NUMBER
and m.MAPPING_ID = p.MAPPING_ID(+)
and m.SUBJECT_ID = p.SUBJECT_ID(+)
nd m.VERSION_NUMBER = p.VERSION_NUMBER(+)
and m.MAPPING_NAME = :MAP_NAME o
rder by m.version_number;

Then modify the LAST_SAVED, UTC_LAST_SAVED in OPB_VERSION_PROPS and OPB_MAPPING first; then modify the VERSION_NUMBER in OPB_PROGRAM_INFO if necessary.

--The timsstamp below is just a sample
update OPB_VERSION_PROPS v set last_saved='12/05/2008 09:10:11', UTC_LAST_SAVED=1228363499
where v.OBJECT_ID = :MAP_ID and
version_number = :VER_NUM and
object_type = 21;

update opb_mapping m set last_saved='12/05/2008 09:10:11', UTC_LAST_SAVED=1228363499
where MAPPING_ID = :MAP_ID and version_number = :VER_NUM;

update opb_program_info set VERSION_NUMBER = :VER_NUM
where mapping_id = :MAP_ID and subject_id = :SUB_ID;

Link from EXP_FROM.PORT_NAME to ???

select S.SUBJ_NAME, WF.INSTANCE_NAME ||'.'|| F.FIELD_NAME
FROM_NAME, F.WIDGET_ID, F.FIELD_ORDER, F.FIELD_ID,
WT.INSTANCE_NAME ||'.'|| T.FIELD_NAME TO_NAME, T.WIDGET_ID, T.FIELD_ORDER, T.FIELD_ID
from OPB_WIDGET Z, OPB_WIDGET_INST WF, OPB_WIDGET_INST WT,
OPB_WIDGET_FIELD F, OPB_WIDGET_FIELD T, OPB_WIDGET_DEP D, OPB_SUBJECT S
where Z.SUBJECT_ID = S.SUBJ_ID
and Z.IS_VISIBLE = 1
and Z.WIDGET_ID = F.WIDGET_ID
and Z.WIDGET_ID = WF.WIDGET_ID
and Z.RU_VERSION_NUMBER = WF.VERSION_NUMBER
and WF.REF_VERSION_NUMBER = F.VERSION_NUMBER
and WF.VERSION_NUMBER = D.VERSION_NUMBER
and WF.MAPPING_ID = D.MAPPING_ID
and WF.INSTANCE_ID = D.FROM_INSTANCE_ID
and F.FIELD_ID = D.FROM_FIELD_ID
and D.TO_INSTANCE_ID = WT.INSTANCE_ID
and D.TO_FIELD_ID = T.FIELD_ID
and D.MAPPING_ID = WT.MAPPING_ID
and D.VERSION_NUMBER = WT.VERSION_NUMBER
and WT.WIDGET_ID = T.WIDGET_ID
and WT.REF_VERSION_NUMBER = T.VERSION_NUMBER
and Z.WIDGET_NAME like 'EXP_FROM%'
and F.FIELD_NAME like 'PORT_NAME%'
order by F.FIELD_ID;

How the connection values is set at session level

select x.WORKFLOW_ID , t.TASK_ID, t.TASK_NAME, b.INSTANCE_ID, b.INSTANCE_NAME,
b.SESS_WIDG_INST_ID, x.CONNECTION_NUM, x.CONNECTION_TYPE, x.CONNECTION_ID,
x.CONNECTION_VALUE, c.OBJECT_NAME
from opb_session s, opb_task t, OPB_SWIDGET_INST b, OPB_SESS_CNX_VALS x, opb_cnx c
where c.OBJECT_ID(+) = x.CONNECTION_ID and s.MAPPING_ID = b.MAPPING_ID and
s.SESSION_ID = b.SESSION_ID and s.SESSION_ID = t.TASK_ID and
s.SESSION_ID = x.SESSION_ID and b.SESS_WIDG_INST_ID = x.SESS_WIDG_INST_ID and
t.SUBJECT_ID = :SUBJ_ID and b.INSTANCE_NAME like :WIDGET_NAME -- Source/Target
and t.TASK_NAME like :SESS_NAME
order by t.task_name, b.SESS_WIDG_INST_ID;

Find Transformation Attribute Override at Session Level

select f.SUBJ_NAME Folder, t.task_name SESSION_NAME, i.INSTANCE_NAME,
o.OBJECT_TYPE_NAME, a.*
from opb_swidget_attr a, OPB_SWIDGET_INST i,
OPB_WIDGET w, OPB_OBJECT_TYPE o,
opb_task t, opb_subject f
where a.attr_value in (:VALUE1, :VALUE2, :VALUE3)
and i.SESSION_ID = a.SESSION_ID
and i.SESS_WIDG_INST_ID = a.SESS_WIDG_INST_ID
and i.WIDGET_ID = w.WIDGET_ID
and i.WIDGET_TYPE = w.WIDGET_TYPE
and i.WIDGET_TYPE = o.OBJECT_TYPE_ID
and i.SESSION_ID= t.task_id
and t.SUBJECT_ID= f.subj_id;

List all the Transformations in a given Mapping

Including the transformations within the mapplet
WITH M AS (
select M.SUBJECT_ID, M.MAPPING_ID
from OPB_MAPPING M, OPB_SUBJECT S
where S.SUBJ_ID = M.SUBJECT_ID
and S.SUBJ_NAME LIKE :Folder_Name
and M.MAPPING_NAME like :Mapping_Name
)
select O.OBJECT_TYPE_NAME, W.INSTANCE_NAME, W.COMMENTS
from OPB_WIDGET_INST W, OPB_OBJECT_TYPE O, M
where O.OBJECT_TYPE_ID = W.WIDGET_TYPE
and O.OBJECT_TYPE_NAME NOT IN ('Mapplet')
and W.MAPPING_ID = M.MAPPING_ID
union
select O.OBJECT_TYPE_NAME, W.INSTANCE_NAME, W.COMMENTS
from OPB_WIDGET_INST W, OPB_OBJECT_TYPE O, M
where O.OBJECT_TYPE_ID = W.WIDGET_TYPE
and O.OBJECT_TYPE_NAME NOT IN ('Mapplet', 'Output Transformation', 'Input Transformation')
and W.MAPPING_ID in (
select X.MAPPING_ID
from OPB_WIDGET_INST W, OPB_OBJECT_TYPE O, M, OPB_MAPPING X
where W.MAPPING_ID = M.MAPPING_ID
and O.OBJECT_TYPE_ID = W.WIDGET_TYPE
and O.OBJECT_TYPE_NAME = 'Mapplet'
and X.REF_WIDGET_ID = W.WIDGET_ID
)
order by 1,2 ;

Wednesday, October 5, 2011

Informatica Collations or TE_7073 Aggregate Errror: Expecting keys to be ascending

The above Error occurs when the aggregator option "Sorted Input" is enabled and the data is being sorted by the source DB Engine.
This is caused when the Source DB's and Informatica's Collation are different thus aggregator raises an error when it receives data in a different from expected order. As you Can see at the image below character "_" is collated before char "S" by default. 





Informatica expects the opposite since it is using binary sort.

In order to fix that uses the corresponding DB clause to utilize the proper collation. In that particular example we are using Sybase IQ and the solution is to change order by clause


From:
Order By DetailTbl.AST_KEY, 

DetailTbl.AST_VALUE_TYPE, 
DetailTbl.AS_ID_TIME_BY_DAY_DT

To:
Order By DetailTbl.AST_KEY, 

SORTKEY(DetailTbl.AST_VALUE_TYPE, 'binary'), 
DetailTbl.AS_ID_TIME_BY_DAY_DT


if we issue the query with the altered order by clause we get the order that Infa expects.

Some rules that apply:

  • A character set is a set of symbols and encodings.
  • A collation is a set of rules for comparing characters in a character set.
  • Any given character set always has at least one collation.
  • Any given character set may have several collations.

Friday, September 16, 2011

INFA Quick Tip: Create a Target Using an Expression


This is a quick tip that the famous Panoutsos told me. If you want to cut some time during development you can instantly create and add a target based on an Expression definition.



To do that, simply right click on the desired expression task and select "Create and Add Target".

Of course variable and input ports are being discarded from the target table. Only Output and Input/Output ports are being included during the target's creation.


Tuesday, July 12, 2011

HOW TO: Change the domain database password


HOW TO: Change the domain database password

Solution
To change the domain database password, do the following:
1. Back up nodemeta.xml:
    cd <informatica--installation-folder>/server/config/
    cp nodemeta.xml nodemeta_backup.xml

2. Run the command infasetup UpdateGatewayNode to change the password. Run this command on each gateway node.

Example:
cd <informatica--installation-folder>/server
infasetup.sh updateGatewayNode -DatabaseAddress in <DB IP>:<DB PORT> -DatabaseUserName <DBUid> -DatabasePassword newpassword -DatabaseType oracle -DatabaseServiceName orcl -DomainName <Domain Name> -NodeName <node Name> -NodeAddress in<Node Ip>:<Infa Port> -LogServiceDirectory C:\Informatica\PowerCenter8.1.1\server\tomcat\logs

3. Start the Informatica services.

Note:
Set the parameters enclosed within angular brackets <> according to you environment.

Friday, June 10, 2011

Change Default Formating in WEBI


In order to change default formating in WEBI XI onwards do the following

1.
Edit the configuration  file defaultConfig.xml which resides at the server uder business objects installation  e.g C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\classes\AppletConfig\defaultConfig.xml. If you are using rich client you must change the local file.


2.
The thing I want to point out here is the BACKGROUND setting. You see, in Web Intelligence, you cannot set the cells in a table to be transparent. That’s always bugged me. However, you can set the background to be transparent by default by changing the BACKGROUND line to the following:
<BACKGROUND R=”" G=”" B=”"/>


If you do this, you probably want to do the same for the next section, alternate body cells in a table (Alternate Row Shading), so the entire body of the table is transparent. After making this change, your table body will be transparent by default, but you can add color, to the background if you choose.
As you scroll down through the file, you see many things that you can customize in your formats. But one of the coolest options is at the bottom. Scroll down to the bottom, and you will find the settings for the skins. The built in skins are, in my humble opinion, ugly. Well, you can add your own skins. The skins are stored as images in the following folder:


C:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\images\
I added a new image to this folder called globe.jpg. Then I added the following toward the bottom of the file:


<KEY VALUE=”cell_skin5,report_skin4,section_skin5,bloc_skin5?>
<SKIN NAME=”Globe” TYPE=”stretch”>
boimg://globe.jpg
</SKIN>
</KEY>


Now, when I go to select a skin for a report, Globe is listed among the options.

Source http://michaelwelter.wordpress.com/ 

Tuesday, March 29, 2011

Informatica 8.6.1: How To Avoid Erros Due to Reserved Words



In order to avoid SQL error at run-time due to reserved words at columns names you can do the following:


    1.  Create a reserved words file, reswords.txt, in the <PowerCenter_Home>\server\bin directory.
    2.  Specify the reserved words in the reswords.txt.



           Following is a sample resword.txt file:


           [SQL Server]
           RETURN
           TRANSACTION

            In the reswords.txt file, the following connection headers can be provided: 
            
                    [Teradata]
                    [Oracle]
                    [DB2]
                    [Sybase]
                    [Informix]
                    [SQL Server]
                    [ODBC]
                    [NEOVIEW]
                    [Netezza]


    3.  In Informatica Administrator, select the Data Integration Service and ddit the custom properties. 


    4. Add the following custom property:



    5.  Restart Integration Service. 


    6.  (OPTIONAL) Set the following value under Custom Properties in the Session Config Object 
          Properties tab:


                    ?Attribute: ReservedWordsFile
                    ?Value: C:\informatica\Powercenter8.6.1\server\bin\resword.txt