Показаны сообщения с ярлыком impdp. Показать все сообщения
Показаны сообщения с ярлыком impdp. Показать все сообщения

четверг, 8 декабря 2016 г.

Oracle: importdp.sh: UDI-00014: invalid value for parameter, 'remap_schema'

После включения опции подкрашивания результатов команды grep
модифицированная версия утилиты импорта дампов importdp.sh стала выдавать ошибку:

./importdp.sh MY_NEW_SCHEMA mydumpfile.dmp

-----------------------------------------
Restoring from E USER to MY_NEW_SCHEMA using dump mydumpfile.dmp ...
-----------------------------------------

Import: Release 11.2.0.4.0 - Production on Thu Dec 8 19:23:40 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
UDI-00014: invalid value for parameter, 'remap_schema'

Оказалось, что для подкрашивания текста grep добавляет к найденной строке дополнительные символы, что влияет на длину результирующей строки: визуально строка выглядит прежней, но на деле она становится длиннее за счет доп.символов, например, команда
echo "foo"
выведет на экран слово из 3-х букв:
foo
команда
expr length `echo "foo"`
сообщит, что слово длиной 3 символа:
3
команда
echo "foo"|grep foo
выведет на экран все то же слово "foo", только в этот раз оно будет подкрашено (по-умолчанию красным):
foo
вроде бы, ничего особенного, визуально, также 3 символа, но если посчитать количество символов в строке с помощью команды
expr length `echo "foo"|grep foo`
то результат будет:
19
потому что на самом деле строка уже состоит не только из слова, но еще и из управляющих символов, которые можно увидеть с помощью команды:
echo "foo"|grep foo|less
результатом которой будет
ESC[01;31mfooESC[00mESC[K

среда, 25 мая 2016 г.

Oracle: директории

Пример: чтобы утилита "impdp" сразу сохраняла лог импорта в определенной папке, например, "/mnt/oracle/dumps/logs", нужно:
1) создать нужную папку (в примере "LOG_DIR"):
create directory LOG_DIR as '/mnt/oracle/dumps/logs';
2) указать ее в команде запуска:
impdp ... LOGFILE=LOG_DIR:import.log

четверг, 12 марта 2015 г.

importdp.sh - вариант с FROM_USERNAME

#!/bin/sh

# Set the parameters first
# -------------------------------------
# system user name
SYSTEM=<DBA_USERNAME>
# system user password
PASSWD=<DBA_PASSWORD>

# Instance name (if any)
URL=@<ORACLE_SID>

# New schema password
NEW_SCHEMA_PASSWD=<NEW_SCHEMA_PASSWD>

# block_150312_2116(begin)
# Проверка наличия новой схемы (импорт будет выполнен только в случае, если новой схемы в экземпляре Oracle нет):
daScr=/tmp/imp_150312_2100.sql
echo SET PAGESIZE 0\;>$daScr
echo select count\(\*\) from dba_users where username=upper\(\'$2\'\)\;>>$daScr
echo exit\;>>$daScr
export daUsrCnt=`sqlplus -S / as sysdba @$daScr`
if [ $daUsrCnt == 0 ]; then
  # block_150312_2116_A(begin)
  # Создаем схему до импорта, чтобы сразу же задать ей пароль [потому что мы ленимся :-) ]:
  echo create user $2 identified by $NEW_SCHEMA_PASSWD\;>$daScr
  echo grant connect\,resource to $2\;>>$daScr
  echo grant select on v_\$locked_object to $2\;>>$daScr
  echo exit \;>>$daScr
  sqlplus / as sysdba @$daScr
# Весь остальной скрипт ниже не изменялся.
  # block_150312_2116_A(end)

# Set the ORACLE_HOME variable to find an "imp" utility
# ORACLE_HOME=/usr/oracle
# -------------------------------------

help() {
  echo "-------------------------------------"
  echo "Logical Database restore utility v0.1"
  echo "-------------------------------------"
  echo "USAGE:"
  echo "./importdp.sh <FROM_USERNAME> [<TO_USERNAME>] [<FILE_NAME>]"
  echo 
  echo "EXAMPLE:"
  echo "./importdp.sh LNXSTEND23 LNXTEST23 lnx.dmp"
}

if [ $# -eq 0 ] ; then
  help;
  exit 1;
fi

FROM_USERNAME=$1
TO_USERNAME=$2
FILENAME=$3
LOGFILE="restore_$TO_USERNAME.log"

if [ "$FILENAME" == "" ] ; then
  FILENAME="expdat.dmp";
fi  

if [ "$TO_USERNAME" == "" ] ; then
  TO_USERNAME=$FROM_USERNAME;
fi  

if [ "$ORACLE_HOME" != "" ] ; then
  CMD="$ORACLE_HOME/bin/impdp";
else
  CMD="impdp";  
fi  

if [ ! -f $FILENAME ] ; then
  echo "ERROR:"
  echo "File $FILENAME does not exist."; 
  exit 1;
fi

echo "-----------------------------------------"
echo "Restoring from $FROM_USERNAME to $TO_USERNAME using damp $FILENAME ..."
echo "-----------------------------------------"

export NLS_DATE_FORMAT="YYYY-MM-DD" 
export NLS_TIMESTAMP_FORMAT="YYYY-MM-DD HH24:MI:SS"

$CMD $SYSTEM/$PASSWD$URL SCHEMAS=$FROM_USERNAME DIRECTORY=BACKUP_DIR REMAP_SCHEMA=$FROM_USERNAME:$TO_USERNAME TRANSFORM=OID:N DUMPFILE=$FILENAME LOGFILE=$LOGFILE
else
  # Если новая схема уже существует, то сообщаем об этом пользователю и не выполняем импорт:
  echo Schema $2 already exists.
fi
rm $daScr
# block_150312_2116(end)

Архив