Tuesday, July 27, 2010

msmtp - simple smtp client

If you need to send mails from some UNIX box where mail transport don't work (MTA not configured properly), you may use this nice tool:
http://msmtp.sourceforge.net
I've compiled it for Linux and AIX 6.1 (with gcc compiler) without any issue.
Some samples of usage:
# echo "Test" | msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net
will send mail with no subject and "Test" in mail body.
Otherwise you may construct text file like this and then redirect it to msmtp
# cat mail.txt
From: root@oracle.com
To: user@some.domain.net
Subject: Very important message!!!

Hi! How are you?
#
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net <>> mail.txt
it will be mail with attachment:
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net < style="font-weight: bold;">
UPDATE:
There is some strange behavior on AIX: attachments shown as is (BASE64 code) in mail body not as attachments!
This fix works for me:
# msmtp --host=smtp.server.org -f root@oracle.com user@some.domain.net <<> From: root@oracle.com
> To: user@some.domain.net
> Subject: Very important message!!!
>
> See this attachment:
> $(uuencode install.log.gz install.log.gz)
>
> EOF
#

Monday, July 26, 2010

Oracle Data Guard platform compatibility

There is two interesting MOS notes about Oracle's DR solution (DG).
- Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration [ID 413484.1]
and
- Data Guard Support for Heterogeneous Primary and Logical Standbys in Same Data Guard Configuration [ID 1085687.1]
It seems that we have not so much opportunities to implement heterogeneous DR configurations.

Friday, June 19, 2009

How to disable reference constraint(s) for particular table(s)

Anonymous PL/SQL block for single table:

declare
alter_tbl varchar2(4000) := '';
begin
SELECT 'ALTER TABLE '||table_name||' DISABLE CONSTRAINT '||constraint_name INTO alter_tbl FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name='TABLE_NAME' AND constraint_type <> 'R') AND status = 'ENABLED';
--dbms_output.put_line(alter_tbl);
execute immediate alter_tbl;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
dbms_output.put_line('Table does not have any (enabled) reference constraints!');
end;
/

And for two (or more) tables:

declare
cnt number;
begin
SELECT count(table_name) INTO cnt FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name IN ('1_TABLE_NAME', '2_TABLE_NAME') AND constraint_type <> 'R') AND status = 'ENABLED';
IF cnt = 0 THEN
dbms_output.put_line('Table does not have any (enabled) reference constraints!');
ELSE
FOR alter_tbl IN (
SELECT 'ALTER TABLE '||table_name||' DISABLE CONSTRAINT '||constraint_name AS tbl FROM user_constraints WHERE r_constraint_name IN (SELECT constraint_name FROM user_constraints WHERE table_name IN ('1_TABLE_NAME', '2_TABLE_NAME') AND constraint_type <> 'R') AND status = 'ENABLED'
) LOOP
-- dbms_output.put_line(alter_tbl.tbl);
execute immediate alter_tbl.tbl;
END LOOP;
END IF;
END;
/

Friday, August 1, 2008

Oracle's OTN and wget (HOWTO)

Как качать файлы с otn.oracle.com wget'ом, например Linux_x86_64_Grid_Control_full_102030_disk1.zip - Oracle Enterprise Manager 10g Grid Control for Linux x86-64?
Да вот так! (см. http://forums.oracle.com/forums/thread.jspa?messageID=2666987)

usd@blackhole:~> wget -v -c --post-data="remoteIp=myIP>&globalId=&redirectUrl=\
http:%2F%2Fdownload-llnw.oracle.com:80\
%2Fotn%2Flinux%2Foem%2F10203%2F\
Linux_x86_64_Grid_Control_full_102030_disk1.zip\
&username=
myOTNusername>\
&password=
mypasswd>\
&submit=Continue" \
https://profile.oracle.com/jsp/reg/loginHandler.jsp



Sunday, July 6, 2008

DNS resolver in Solaris SXDE

После установки Solaris Express Developer Edition и настройки сетевой карты обнаружил невозможность выхода в интернет из-за неработоспособности получения IP адреса сервера по его имени программами, в частности Firefox'ом.
Выругавшись неприлично отложил эту проблему в долгий ящик как некритичную.
И вот практически случайно наткнулся на следующую информацию (http://developers.sun.ru/forum/viewtopic.php?f=17&t=36):

cp /etc/nsswitch.dns /etc/nsswitch.conf

прописывание руками
/etc/resolv.conf

nameserver <адрес>
=========================
И оно заработало! :)

Tuesday, August 14, 2007

Собираем Qt 4.4.3 (скрипт)

Вот решил написать небольшой скриптик для автоматизации сборки замечательной GUI библиотеки Qt.
qt4_build.sh :
-----------------------------


#!/bin/bash

#QT_TASTE=qt-x11-opensource-src;
QT_TASTE=qt-all-opensource-src;

#QT_VER=4.1.5;
#QT_VER=4.2.2;
QT_VER=4.4.3;

BUILD_TYPE=RELEASE;
#BUILD_TYPE=DEFAULT;
#BUILD_TYPE=DEBUG;
#BUILD_TYPE=MINIMAL;

#MAKE="make -j3";
MAKE="make -j2";

DEVEL_ROOT=~/devel;

# Which Arch to use?
ARCH=32;
#ARCH=64;

# Which compiler to use?
#COMPILER=GCC;
#PATH=/opt/usr/local/bin:$PATH;
COMPILER=ICC;

if [ $COMPILER == "GCC" ]; then
if [ $ARCH == "32" ]; then
PLATFORM=linux-g++-32;
elif [ $ARCH == "64" ]; then
PLATFORM=linux-g++-64;
else
echo -n -e "\nERROR: Unknown ARCH !!!\n";
exit 1;
fi
elif [ $COMPILER == "ICC" ]; then
ICC_HOME=/home/usd/intel;
ICC_VER=10.1.021;
OPTS="-no-pch";
if [ $ARCH == "32" ]; then
export PATH=$ICC_HOME/cc/$ICC_VER/bin:$PATH;
PLATFORM=linux-icc-32;
export LD_LIBRARY_PATH=$ICC_HOME/cc/$ICC_VER/lib:$LD_LIBRARY_PATH;
elif [ $ARCH == "64" ]; then
export PATH=$ICC_HOME/cce/$ICC_VER/bin:$PATH;
PLATFORM=linux-icc-64;
export LD_LIBRARY_PATH=$ICC_HOME/cce/$ICC_VER/lib:$LD_LIBRARY_PATH;
echo -n -e "\nWARNING: on PLATFORM=linux-icc-64 BUILD_TYPE=DEBUG by default!!!\n";
BUILD_TYPE=DEBUG;
else
echo -n -e "\nERROR: Unknown ARCH !!!\n";
exit 1;
fi
else
echo -n -e "\nERROR: Unknown COMPILER !!!\n";
exit 1;
fi

QT_TARBALL=$QT_TASTE-$QT_VER.tar.bz2;

if [ $BUILD_TYPE == "RELEASE" ]; then
B_T=release-static;
OPTS="-release -static $OPTS -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support -qt-sql-sqlite";
elif [ $BUILD_TYPE == "DEFAULT" ]; then
B_T=default;
OPTS="$OPTS";
elif [ $BUILD_TYPE == "DEBUG" ]; then
B_T=debug-shared;
OPTS="-debug -shared $OPTS -qt-sql-sqlite";
elif [ $BUILD_TYPE == "MINIMAL" ]; then
B_T=release-minstatic;
OPTS="-release -static $OPTS -qt-zlib -no-gif -qt-libpng -no-libmng -qt-libjpeg -no-qt3support -qt-sql-sqlite -no-exceptions -no-nis -no-cups -no-iconv -no-opengl -no-sm -no-xshape -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-fontconfig -no-tablet -no-xkb -no-glib";
else
echo -n -e "\nERROR: Unknown BUILD_TYPE !!!\n";
exit 1;
fi

cd $DEVEL_ROOT;

if [ -d $DEVEL_ROOT/$QT_TASTE-$QT_VER ]; then
rm -rf $QT_TASTE-$QT_VER;
tar xjf $QT_TARBALL;
else
tar xjf $QT_TARBALL;
fi

if [ -d $DEVEL_ROOT/qt-$QT_VER-$PLATFORM-$B_T ]; then
rm -rf qt-$QT_VER-$PLATFORM-$B_T;
mv $QT_TASTE-$QT_VER qt-$QT_VER-$PLATFORM-$B_T;
else
mv $QT_TASTE-$QT_VER qt-$QT_VER-$PLATFORM-$B_T;
fi

QT_DIR=$DEVEL_ROOT/qt-$QT_VER-$PLATFORM-$B_T;
TARGET_DIR=$QT_DIR;
PATH=$TARGET_DIR/bin:$PATH;

export PATH;

cd $QT_DIR;

# HACK for intel static libs
mv $TARGET_DIR/mkspecs/linux-icc/qmake.conf $TARGET_DIR/mkspecs/linux-icc/qmake_ORIG.conf
sed s/-wd654,1572/"-wd654,1572 -static-intel"/ $TARGET_DIR/mkspecs/linux-icc/qmake_ORIG.conf > $TARGET_DIR/mkspecs/linux-icc/qmake.conf

./configure -prefix $TARGET_DIR -platform $PLATFORM $OPTS;

$MAKE;


-----------------------------
Скрипт позволяет упростить сборку различных конфигураций Qt. Задайте необходимые переменные, скопируйте архив с Qt в директорию DEVEL_ROOT и запустите.

Thursday, March 1, 2007