Когда производится импорт данных из резервоной копии, то данные в этих таблицах могут сбится. Чтобы починить репозитории надо установить значения 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
<!-- 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>
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
- В таблице не должно быть больше одного поля типа bit
- Таблица должна иметь Primary Key (ограничение накладывается публикацией таблиц при транзакционном реплицировании данных SQL Server)
- Пользователь, под которым работают сервисы Attunity Stream (sqlcdclogger и irpcd), должен иметь привилегии sysadmin в SQL Server.
Первые два требования описаны документации, третье выяснилось в беседе с разработчиками на форуме.
Tags: Attunity
Tags: Attunity
#!/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
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
Описание таблицы:
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
При обновлении Metadata Navigator надо удалить snpsre_res.jar из WEB-INF и скопировать sunopsis.zip в WEB-INF из директории lib инсталляции ODI.
Tags: ODI, Metadata Navigator, patch, Oracle Data Integrator
- Agent (1)
- Attunity (4)
- autorun (1)
- charset (4)
- clear lock (1)
- conversion (1)
- EmEditor (1)
- j2me (1)
- java (1)
- java native library (1)
- java.library.path (1)
- JDBC (3)
- JNDI (1)
- JNI (1)
- kill (1)
- Metadata Navigator (2)
- MS Access (1)
- ODBC (1)
- ODI (9)
- one line (2)
- Oracle (6)
- Oracle Data Integrator (8)
- patch (1)
- Perl (2)
- Postgres (1)
- QCDNP2 (1)
- RAC (1)
- resource (1)
- reverse enginering (1)
- SAP (1)
- services (2)
- session (1)
- SMF (1)
- Solaris (1)
- Sunopsis (5)
- Tomcat (3)
- UnsatisfiedLinkError (1)
- UTF-8 (1)
- Windows (1)
- xml (2)
- ПДД (1)
- правила дорожного движения (1)
- реестр (1)