Sort: by date | rating in descending | ascending order
Как решить проблему с генерацией ID новых объектов в ODI
Макс on 14 March 2008 13:45
ODI генерирует ID новых объектов инкрементально, но при этом не использует встроенные в СУБД Sequences, а хранит последнее сгенерированной значение в таблицах SNP_ID и SNP_ENT_ID репозиториев.
Когда производится импорт данных из резервоной копии, то данные в этих таблицах могут сбится. Чтобы починить репозитории надо установить значения ID_NEXT в максимальное значение ID — без последних трёх цифр для каждого объекта ODI.
Это можно сделать и руками, но я предлагаю скрипт, который сгенерирует запросы, нужные для обновления репозиториев:
Для SNP_ID
select 'update SNP_ID set ID_NEXT = (select substr(max('||
a4.column_name||'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||') where ID_TBL=''' ||a3.id_tbl ||
''' and ID_NEXT != (select substr(max('||a4.column_name||
'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||')
 GO'  q from SNP_ID a3, (select a2.table_name, a2.COLUMN_NAME
from dba_constraints a1, DBA_CONS_COLUMNS a2
where a1.OWNER = 'ODI_REP' and a1.CONSTRAINT_TYPE ='P' and a2.OWNER = 'ODI_REP'
and a1.CONSTRAINT_NAME = a2.CONSTRAINT_NAME) a4 where a3.id_tbl = a4.table_name
Для SNP_ENT_ID
select 'update SNP_ENT_ID set ID_NEXT = (select substr(max('||
a4.column_name||'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||') where ID_TBL=''' ||a3.id_tbl ||
''' and ID_NEXT != (select substr(max('||a4.column_name||
'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||')
 GO'  q from SNP_ENT_ID a3, (select a2.table_name, a2.COLUMN_NAME
from dba_constraints a1, DBA_CONS_COLUMNS a2
where a1.OWNER = 'ODI_REP' and a1.CONSTRAINT_TYPE ='P' and a2.OWNER = 'ODI_REP'
and a1.CONSTRAINT_NAME = a2.CONSTRAINT_NAME) a4 where a3.id_tbl = a4.table_name

Tags: Sunopsis, ODI

Read more… / Add comment / Comment (179) / Rating: 3.00 / Rate 1 2 3 4 5
Настройка JDBC resource в JNDI Tomcat 6
Макс on 07 March 2008 13:15
 <!-- Global JNDI resources -->
  <GlobalNamingResources>

    <!-- Test entry for demonstration purposes -->
    <Environment name=«simpleValue» type=«java.lang.Integer» value=«30»/>

    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users -->
    <Resource name=«UserDatabase» auth=«Container»
              type=«org.apache.catalina.UserDatabase»
       description=«User database that can be updated and saved»
           factory=«org.apache.catalina.users.MemoryUserDatabaseFactory»
          pathname=«conf/tomcat-users.xml» />

    <Resource name=«jdbc/testDB» auth=«Container»
     type=«javax.sql.DataSource»
     driverClassName=«oracle.jdbc.OracleDriver»
     url=«jdbc:oracle:thin:@123.123.123.123:1521:testDB» 
     username=«db_user»
     password=«secret» maxActive=«20» maxIdle=«10» maxWait=«-1» />

  </GlobalNamingResources>
...
...
...
    <Engine>

      <Host>

      <Context docBase=«<TOMCAT_INSTALL_PATH>/webapps/WebApplication» 
path=«/WebApplication» reloadable=«true» 
source=«com.ibm.wtp.web.server:WebApplication»>
         <ResourceLink global=«jdbc/testDB» name=«testdatabase»
          type=«java.sql.DataSource» />

      </Context>

      </Host>

    </Engine>

  </Service>

Tags: Tomcat, JNDI, resource, tomcat

Read more… / Add comment / Rating: 2.97 / Rate 1 2 3 4 5
Загрузка Native библиотек в Tomcat
Макс on 06 March 2008 10:32
Если в Java попытаться загрузить одну и ту же native библиотеку 2 раза, то JVM падает со следующей ошибкой:
java.lang.UnsatisfiedLinkError: Native Library <native library name> already loaded in another classloader

В Tomcat работает несколько ClassLoader'ов, а нужно, чтобы каждый конкретный jar подгружался ровно один раз. Поэтому не следует кидать одну и ту же библиотеку в WEB-INF/lib для каждого приложения. Правильнее добавить в CLASSPATH в файле bin/setclasspath.sh путь к этой библиотеке. Или воспользоваться механизмом ENDORSED_DIRS, устанавливая параметр JVM java.endorsed.dir в директорию, где будут находиться все автоматически подгружаемый библиотеки. Для Tomcat <= 5.5 это $CATALINA_HOME/common/lib, а для 6 >= это $CATALINA_HOME/endorsed, но всё это можно переопределить в bin/catalina.sh или bin/setclasspath.sh.
Ну и, разумеется, не следует забывать указывать путь к директории с native библиотекой, а иначе получите java.lang.UnsatisfiedLinkError: no <native library name> in java.library.path.
Это делается установкой переменной окружения LIBRARY_PATH для Windows и LD_LIBRARY_PATH для Solaris. Либо можно указать параметр JVM java.library.path.

Собственно, я разбирался с этим, когда имел 2 приложения, которые использовали OCI драйвер для Oracle и, соотвественно, требовали библиотеку ocijdbc10. Два дня шаманил.

Tags: JNI, java native library, UnsatisfiedLinkError, java.library.path

Read more… / Add comment / Rating: 2.96 / Rate 1 2 3 4 5
Требования к установке Attunity Stream для SQL Server 2000
Макс on 07 February 2008 11:01
  1. В таблице не должно быть больше одного поля типа bit
  2. Таблица должна иметь Primary Key (ограничение накладывается публикацией таблиц при транзакционном реплицировании данных SQL Server)
  3. Пользователь, под которым работают сервисы Attunity Stream (sqlcdclogger и irpcd), должен иметь привилегии sysadmin в SQL Server.

Первые два требования описаны документации, третье выяснилось в беседе с разработчиками на форуме.

Tags: Attunity

Read more… / Add comment / Rating: 2.94 / Rate 1 2 3 4 5
Redeploy Attunity Solution
Макс on 07 February 2008 10:57
При переустановке CDC Solution Attunity Stream пропадают служебные таблицы SERVICE_CONTEXT и CONTROL_TABLE. Чтобы пофиксить эту проблему, надо выполнить инструкции, описанные на форуме Attunity.

Tags: Attunity

Read more… / Add comment / Rating: 3.02 / Rate 1 2 3 4 5
Проблема при настройке JDBC
Макс on 06 September 2007 17:01
Читать в metalink Note:342419.1

Tags: Oracle, oracle, JDBC, RAC

Read more… / Add comment / Rating: 2.95 / Rate 1 2 3 4 5
Как прописать ODI в автозапуск Solaris 10
Макс on 06 September 2007 10:58
Для начала нужно создать скрипт для запуска сервиса:
#!/sbin/sh
# odi
#

. /lib/svc/share/smf_include.sh
# путь к директории инсталляции ODI
ODI_HOME=/opt/odi/oracle/oracledi/oracledi
# путь к java для ODI
ODI_JAVA_HOME=/usr/jdk/jdk1.5.0_12
# параметры для соединения репозиторием
ORACLE_SID=odiDB
ORACLE_BASE=/opt/oracle
ORACLE_HOME=${ORACLE_BASE}/product/10.2.0/db_1
ORACLE_ADMIN=${ORACLE_BASE}/admin
TNS_ADMIN=${ORACLE_HOME}/network/admin
LD_LIBRARY_PATH=${ORACLE_HOME}/lib
PATH={ORACLE_HOME}/bin:{ORACLE_HOME}/OPatch:/usr/ccs/bin/:/usr/bin:/etc:/usr/openwin/bin:/usr/local/bin:${PATH}:.
export ODI_HOME ODI_JAVA_HOME ORACLE_SID ORACLE_BASE ORACLE_HOME ORACLE_ADMIN TNX_ADMIN LD_LIBRARY_PATH PATH
case "$1" in
        start)
        cd $ODI_HOME/bin
        ./agentscheduler.sh -NAME=MAIN -PORT=20910 -V=1>/dev/null &
        ;;

        stop)
        cd $ODI_HOME/bin
        ./agentstop.sh 20910 > /dev/null 2>&1 &
        ;;

        'restart')
        cd $ODI_HOME/bin
        ./agentstop.sh 20910>/dev/null 2>&1&
        while pgrep -f "classpath \/opt\/odi\/oracle\/oracl" > /dev/null
        do
                sleep 1
        done
        ./agentscheduler.sh -NAME=MAIN -PORT=20910 -V=1>/dev/null &
        ;;
        *)
        echo "Usage: `basename $0` {start | stop | restart}"
        exit 64
        ;;
esac

Назовём этот скрипт svc-odi и дадим ему права:
chown root:bin svc-odi
chmod 555 svc-odi

Затем сделаем manifeset в директории /var/svc/manifest/application:

<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='odi:odi'>
        <service
                name='application/odi'
                type='service'
                version='1'>
                <create_default_instance enabled='false' />
                <single_instance />
                <dependency name='fs'
                        grouping='require_all'
                        restart_on='none'
                        type='service'>
                        <service_fmri value='svc:/system/filesystem/local' />
                </dependency>
                <dependency name='net'
                        grouping='require_all'
                        restart_on='none'
                        type='service'>
                        <service_fmri value='svc:/network/loopback' />
                </dependency>
                <exec_method
                        type='method'
                        name='start'
                        exec='/opt/odi/svc-odi start'
                        timeout_seconds='60'>
                        <method_context>
                                <method_credential user='odi' group='other' />
                        </method_context>
                </exec_method>
                <exec_method
                        type='method'
                        name='stop'
                        exec='/opt/odi/svc-odi stop'
                        timeout_seconds='60'>
                        <method_context>
                                <method_credential user='odi' group='other' />
                        </method_context>
                </exec_method>
        </service>
</service_bundle>

Незабудьте правильно указать путь до скрипта запуска сервиса. У меня он /opt/odi/svc-odi.
Затем надо проверить правильность манифеста командой.
svccfg validate /var/svc/manifest/application/odi.xml && echo OK
И импортируем его в SMF.
svccfg import /var/svc/manifest/application/odi.xml
Затем сервис можно запустить следующей командой командой.
svcadm enable odi

Tags: ODI, services, Solaris, autorun, SMF, Oracle Data Integrator

Read more… / Add comment / Rating: 3.01 / Rate 1 2 3 4 5
Как закрыть сессию в Oracle, которая блокирует таблицу
Макс on 31 August 2007 13:34
Сначала находим ID таблицы.
select object_id from all_objects where object_name = 'TABLE_NAME'
Затем находим ID сессии, которая блокирует эту таблицу.
select sid from v$lock where id1 = 22222 or id2 = 2222
Затем находим серийный номер сессии
select sid, serial# from v$session where sid = 134
А потом прибиваем сессию к чертям. Параметр — sid || ',' || serial#
alter system kill session '134,9107' immediate

Tags: Oracle, oracle, kill, session, clear lock

Read more… / Add comment / Rating: 3.03 / Rate 1 2 3 4 5
Как узнать, что хранится в таблицах SAP
Макс on 07 August 2007 10:59
Если есть имя таблицы в SAP, то можно легко узнать, что в ней хранится с помощью следующих запросов SQL. Запрос для Oracle.
Описание таблицы:
SELECT 
   DDTEXT 
FROM 
   DD02T
WHERE 
   DDLANGUAGE ='R' 
   AND TABNAME = 'tabname'
ddlanguage — язык, на котором будет выведено описание. Для русского это R, для английского — E. tabname — имя таблицы в СУБД.
Типы колонок и их содержимое можно узнать с помощью запроса:
SELECT 
   COLUMN_NAME, 
   DATA_TYPE || 
      CASE 
         WHEN DATA_LENGTH IS NOT NULL 
            THEN '('||DATA_LENGTH || (
               CASE 
                  WHEN DATA_SCALE IS NOT NULL 
                     THEN ', '||DATA_SCALE 
                  ELSE '' 
               END )||')' 
            ELSE '' 
      END DT, 
   NVL(D.DDTEXT,' ') info 
FROM 
   DBA_TAB_COLS C LEFT JOIN 
   DD04T D ON 
      C.COLUMN_NAME = D.ROLLNAME 
      AND D.DDLANGUAGE = 'R' 
WHERE
   TABLE_NAME = 'tabname'
Из запроса получаем имя колонки, её тип и описание данных.

Tags: SAP, reverse enginering

Read more… / Add comment / Rating: 2.97 / Rate 1 2 3 4 5
Обновление ODI до 10.3.1.3.0
Макс on 30 July 2007 11:25
Вышел новый патч для ODI. В принципе всё обновляется просто, как всегда: просто копированием файлов. Но есть нюанс! :)
При обновлении Metadata Navigator надо удалить snpsre_res.jar из WEB-INF и скопировать sunopsis.zip в WEB-INF из директории lib инсталляции ODI.

Tags: ODI, Metadata Navigator, patch, Oracle Data Integrator

Read more… / Add comment / Rating: 3.01 / Rate 1 2 3 4 5
Search: 
Hello, Guest. ( Login / Create account )