вторник, 8 декабря 2009 г.

Подготовка RHEL6/7 Для Oracle 12c

Note 1961997.1


Установка пакетов:


yum -y install binutils.x86_64 \
compat-libcap1.x86_64 \
compat-libstdc++-33.i686 \
compat-libstdc++-33.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
glibc.i686 \
glibc.x86_64 \
glibc-devel.i686 \
glibc-devel.x86_64 \
ksh.x86_64 \
libaio.i686 \
libaio.x86_64 \
libaio-devel.i686 \
libaio-devel.x86_64 \
libgcc.i686 \
libgcc.x86_64 \
libstdc++.i686 \
libstdc++.x86_64 \
libstdc++-devel.i686 \
libstdc++-devel.x86_64 \
libXi.i686 \
libXi.x86_64 \
libXtst.i686 \
libXtst.x86_64 \
make.x86_64 \
sysstat.x86_64 \



Для устранения ошибки Bug 21151912 -> Doc ID 2062336.1

Installation of 12.1.0.2 Oracle Database Server/Client on RHEL 7/OL7
reports pre-requisite package 'compat-libstdc++' missing. (Doc ID 2062336.1)


yum -y install compat-libstdc++-33.x86_64 \
compat-libstdc++-33.i686


ALERT: Setting RemoveIPC=yes on Redhat 7.2 Crashes ASM and Database Instances


as Well as Any Application That Uses a Shared Memory Segment (SHM) or Semaphores (SEM) (Doc ID 2081410.1)

Set RemoveIPC=no in /etc/systemd/logind.conf

Set RemoveIPC=no in /etc/systemd/logind.conf
Reboot the server or restart systemd-logind as follows:

$ su - root
$ systemctl daemon-reload
$ systemctl restart systemd-logind


Смотрим размеры физической памяти и Swap


# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo


Установка параметров ядра


Общий объём доступной разделяемой памяти (в страницах)


kernel.shmall

Max shared memory = shmall * page_size (так будет в байтах)

Размер страницы:

$ getconf PAGE_SIZE
4096

Например, мы хотим под SGA выделить 10GB

10*1024*1024*1024=107374182240 (10Gb in bytes)
107374182240/4096=2621440
kernel.shmall = 2621440 

kernel.shmall рекомендуется выставлять в максимальное значение
(т.е. равным размеру физической памяти в системе в страницах)
Минимальное рекомендованное значение kernel.shmall = 6291456


Например, в системе 64GB RAM, выделяем всю под shared memory
Если размер страницы равен 4096 Bytes, то kernel.shmall вычисляется так:

64 Gb
64 * 262144 = 16777216

65536 Mb
65536 * 256 = 16777216

67108864 Kb
67108864 / 4 = 16777216.0

68719476736 Bytes
68719476736 / 4096 = 16777216.0

kernel.shmall = 16777216

Закомментируем существующий параметр:
sed -ie 's/^kernel.shmall/#kernel.shmall/g' /etc/sysctl.conf

Вычисляем и устанавливаем новое значение:
MemTotal Kb / 4
echo "kernel.shmall = $(awk '$1 == "MemTotal:"{tmp=$2/4; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf

Применить параметры ядра

$ sysctl -p


Максимальный размер сегмента разделяемой памяти (в байтах)


kernel.shmmax 

Рекомендуется выставлять 1/2 от размера физической памяти в системе (в байтах)

К примеру для 64 Гб это будет:

64*1024*1024*1024=68719476736 (64Gb in bytes)
68719476736/2=34359738368
kernel.shmmax = 34359738368


64 Gb
64 * 536870912  = 34359738368

65536 Mb
65536 * 524288  = 34359738368

67108864 Kb
67108864 * 512  = 34359738368

68719476736 Bytes
68719476736 / 2 = 34359738368
                 

kernel.shmmax  = 34359738368

Закомментируем существующий параметр:
sed -ie 's/^kernel.shmmax/#kernel.shmmax/g' /etc/sysctl.conf

Вычисляем и устанавливаем новое значение:
MemTotal Kb * 512
echo "kernel.shmmax = $(awk '$1 == "MemTotal:"{tmp=$2*512; printf"%0.0f\n", tmp}' /proc/meminfo)" >> /etc/sysctl.conf

Применить параметры ядра

$ sysctl -p


Максимальное число сегментов разделяемой памяти для всей системы


kernel.shmmni 

Рекомендуется установить kernel.shmmni  =  4096

Применить параметры ядра

$ sysctl -p


Рекомендуемые значения других параметров ядра следующие:


kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
kernel.panic_on_oops = 1


Устанавливаем

cat << EOF >> /etc/sysctl.conf
kernel.shmmni = 4096
net.ipv4.ip_local_port_range = 9000 65535
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.panic_on_oops = 1
EOF


Применить параметры ядра

$ sysctl -p


Сетевые параметры:


Устранить обрывы связи для долго работающих запросов
при использовании фаерволов между БД и клиентом

Добавить в /etc/sysctl.conf

cat >> /etc/sysctl.conf << EOF
###########################################
### For CheckPoint Timeout ################
###########################################
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 2700
###########################################
EOF


Применить параметры ядра

$ sysctl -p



Настройка Shell Limits:


Убедитесь, что последняя версия PAM загружена в
/etc/pam.d/login file

cat > /etc/pam.d/login << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
session required pam_limits.so
EOF


Set Shell limits for oracle users:

cat > /etc/security/limits.d/70-oracle.conf << EOF
#+-------------------------------+
#| Setting parameters for Oracle |
#+-------------------------------+
oracle soft nofile 131072
oracle hard nofile 131072
oracle soft nproc 131072
oracle hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
oracle soft memlock 67108864
oracle hard memlock 67108864
#
EOF


Set Shell limits for root users:


cat > /etc/security/limits.d/70-root.conf << EOF
#+-------------------------------------+
#| Setting limits root [for Oracle DB] |
#+-------------------------------------+
root soft nofile 131072
root hard nofile 131072
root soft nproc 131072
root hard nproc 131072
# For 64 Gb Installed : 67108864=64*1024*1024 (размер в Kb)
root soft memlock 67108864
root hard memlock 67108864
#
EOF



Проверяем:

su - oracle -c 'id; ulimit -a'
su - root -c 'id; ulimit -a'




Настройка /dev/shm


Для сервера с RAM=64 GB

su - root
df -h /dev/shm/
umount /dev/shm
mount -t tmpfs shmfs -o size=64g /dev/shm

Добавить строчку в /etc/fstab следующего содержания:

cat >> /etc/fstab <
tmpfs /dev/shm tmpfs size=64g 0 0
EOF


Требование к размеру файловых систем


/tmp -> требуется минимум 1 GB


Установить точное время


ntpdate omega.local
Настройка NTP daemon
Настроить запуск демона с параметром -x :
ntpd -u ntp:ntp -p /var/run/ntpd.pid -x

Настройка разрешения имен


В файле /etc/resolv.conf добавить domain omega.local

Installing the cvuqdisk Package for Linux (RAC only)


rpm -qi cvuqdisk
rpm -iv cvuqdisk-1.0.9-1.rpm


Disabling Transparent HugePages


Необходимо выбрать наиболее удобный вариант

Настройка загрузчика

в /boot/grub/grub.conf -> добавить опцию transparent_hugepage=never

kernel /vmlinuz-2.6.32-504.1.3.el6.x86_64 ro root=LABEL=/ transparent_hugepage=never



Скрипт автозапуска

В файле /etc/rc.local добавить скрипт отключение Transparent HugePages

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi


Начинася с Oracle Linux 7 в ядер UEK, transparent hugepages отключены по умолчанию,
никаких действий принимать не надо!



Настройка Hugepages


Oracle может использовать Hugepages для размещения SGA.
Hugepages не вытесняются в swap.
Процессор уменьшит число трансляций виртуальных адресов памяти в физические.
Кеш CPU Translation Lookaside Buffers (TLB) будет реже устаревать.

При использовании больших страниц памяти shared memory для СУБД настраивать не нужно.
Но если используется ASM, то для его экземпляра зарезервируем 1024 МБ shared memory,
поэтому размер /dev/shm быть не менее  1024 МБ

 $ sqlplus / as sysasm

Для версии 11.2.0.3 и ниже (Note 265633.1)  минимально необходимые параметры:
alter system set memory_target    = 320M scope=spfile sid='*';
alter system set shared_pool_size = 128M scope=spfile sid='*';
alter system set large_pool_size  =  64M scope=spfile sid='*';

Для версии 11.2.0.4 и выше (Note 1536039.1 и Note 1982132.1):
alter system set memory_target    = 1024M scope=spfile sid='*';
alter system set shared_pool_size =  128M scope=spfile sid='*';
alter system set large_pool_size  =   64M scope=spfile sid='*';

Для высоконагруженных многопроцессорных систем (Note 437924.1) 
Для версии 11.2.0.3 и выше:
alter system set memory_max_target= 2048M  scope=spfile sid='*';
alter system set memory_target    = 1536M  scope=spfile sid='*';
alter system set shared_pool_size = 128M   scope=spfile sid='*';
alter system set large_pool_size  = 64M    scope=spfile sid='*';



Необходимо отключить автоматическое управление памятью AMM
alter system set memory_target=0

Количество больших страниц памяти задаётся параметром ядра vm.nr_hugepages.
Можно динамически изменять количество hugepages, но лучше резервировать их при загрузке ОС.


Информацию об использовании hugepages можно узнать из /proc/meminfo:

bash-4.2$ grep Huge /proc/meminfo
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
bash-4.2$


Покажет
- сколько всего выделено страниц
- сколько свободных страниц
- сколько зарезервированных страниц
- размер одной страницы памяти



Рассчитаем необходимое количество страниц:

На сервере 64 Gb
Параметры экземпляра такие:

memory_max_target    = 61440M
memory_target        = 61440M
sga_max_size         = 36864M
sga_target           = 36864M

pga_aggregate_target = 24576M


Если размер страницы равен 2 Mb (2048 Kb)
то количество страниц расчитываем так:


для sga_max_size = 36 Gb

36 Gb
36 * 512               = 18432

36864 Mb
36864 * 0.5            = 18432

37748736 Kb
37748736 / 2048        = 18432

38654705664 Bytes
38654705664 / 2097152  = 18432


Необходимо выделить небольшой запас свободных страниц hugepages

18432 увеличим до 18450

vm.nr_hugepages = 18450

Проверьте настройку лимитов


/etc/security/limits.conf

Пользователю, от которого запускается СУБД разрешено блокировать память такого размера

oracle soft memlock 67108864
oracle hard memlock 67108864

$ ulimit -l

Отключите AMM


SQL> alter system set memory_target=0;
System altered.

SQL> alter system set memory_max_target=0;
System altered.

Установите рассчитанное значение параметру  vm.nr_hugepages


Под root

# vi /etc/sysctl.conf
vm.nr_hugepages = 18450


# sysctl -p
# sysctl vm.nr_hugepages=18450

shutdown immediate;

# reboot


Проверяем:

# grep ^Huge /proc/meminfo


Примечание:


Есть такой bash-скрипт  (MOS) note 401749.1
Который рассчитывает рекомендуемое значение vm.nr_hugepages.


#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done
# Finish with results
case $KERN in
   '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
          echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
   '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End 



$ chmod u+x ./hugepages_setting.sh 
$ ./hugepages_settings.sh
.
.
.
Recommended setting: vm.nr_hugepages = nnnn




среда, 2 декабря 2009 г.

Основные команды FTP

1. ascii
2. bin
3. bye, exit -завершение
4. ls, dir
5. pwd, lpwd -смотрим где находимся на удален или локальн хосте
6. !<локальная команда>
7. close, disconnect -закрытие
8. prompt -интерактивный ввод комманд
9. get <файл> -загрузка с удаленного на локальный
10. put <файл> -пересылка на удаленный
12. mget <файл> -загрузка нескольких файлов с удаленного
13. mput <файл> -пересылка нескольких файлов на удаленный
14. cd <каталог> -смена текущего каталога на удаленном
15. lcd <каталог> -смена текущего каталога на локальном

Примеры:

ftp ftp.example.org
>ls
>dir
>lpwd
>get имя_удаленного_файла имя_локального_файла

>get notes notes2

>bin
>get win.exe

>ascii
>mget s*
чтобы постоянно не подтверждать используйте prompt

>prompt
>mget ora*

>mput dd*

>prompt
>mput k*