# Установка CarabiDB (OracleDB 12c)



# 1 этап - подготовка к установке CarabiDB (OracleDB 12c) на CentOS 7

# Подготовка Centos 7

Выполнять из под root

## sysctl
```
cat << EOT >> /etc/sysctl.d/90-oracle.conf
fs.file-max = 6815744 
kernel.sem = 250 32000 100 128 
kernel.shmmni = 4096 
kernel.shmall = 1073741824 
kernel.shmmax = 4398046511104 
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 
net.ipv4.ip_local_port_range = 9000 65500 
EOT
```
Применить настройки: ```sysctl --system```

Проверить, применены ли настройки: ```sysctl  -a | grep file-max```

## security
```
cat >> /etc/security/limits.d/90-oracle.conf << EOT
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock unlimited
oracle hard memlock unlimited
EOT
```
security Будет применено для всех новых сессий

## актульные адреса к репозиторию
Centos 7 has reached EOL (End of Life) today, 1 July 2024, thus mirrorlist.centos.org is no longer required. In order to install packages, you have to adjust repositories from "mirrorlist" to "baseurl". For most cases vault.centos.org will work well.
```
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|^#\?baseurl=http://mirror\.centos\.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|^#\?baseurl=http:|baseurl=https:|g' /etc/yum.repos.d/CentOS-*.repo
```
Если SSH сервер не доступен, то можно скачать  комманды выше, через curl:
```
curl https://dl.carabisol.ru/centos7-fix.sh > /root/centos7-fix.sh
bash /root/centos7-fix.sh
sudo yum makecache
```

## зависимые пакеты
```
yum install mc unzip binutils smartmontools sysstat -y
yum install make compat-libstdc++-33 compat-libstdc++-33.i686 gcc gcc-c++ glibc glibc.i686 glibc-devel glibc-devel.i686 ksh libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel libstdc++-devel.i686 compat-libcap1 -y
yum install libaio libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi libXi.i686 xorg-x11-utils xauth net-tools xdpyinfo -y
yum install unixODBC unixODBC-devel zlib-devel zlib-devel.i686 -y
```
## создание пользователя и групп
```
groupadd -g 1101 oinstall
groupadd -g 1102 dba
groupadd -g 1103 oper
groupadd -g 1104 backupdba
groupadd -g 1105 dgdba
groupadd -g 1106 kmdba
groupadd -g 1107 asmdba
groupadd -g 1108 asmoper
groupadd -g 1109 asmadmin
useradd -u 1101 -g oinstall -G dba,oper oracle
```
***!!!*** ***Заменить MYPASS*** на свой пароль для пользователя oracle:

```echo "MYPASS" | passwd oracle --stdin```

## отключение SELinux
```
sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/sysconfig/selinux
setenforce permissive
cat /etc/sysconfig/selinux
```

## настройка firewalld
```
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload
```

## проверка X11Forwarding в SSH
```mcedit /etc/ssh/sshd_config```

Убедится, что есть строчка ```X11Forwarding yes```

## прописать в hosts
```
echo "127.0.0.1 CarabiDB CarabiDB.loc" >> /etc/hosts
```

## прописать переменные окужения
```
cat << EOT >> /home/oracle/.profile
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=CarabiDB
export ORACLE_UNQNAME=CarabiDB
export ORACLE_BASE=/home/oracle/oracle
export ORACLE_HOME=\$ORACLE_BASE/12c
export ORACLE_HOME_LISTNER=\$ORACLE_HOME
export ORACLE_SID=CarabiDB
export NLS_LANG=AMERICAN_AMERICA.UTF8
export PATH=/usr/sbin:\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOT
```

```
cat << EOT >> /home/oracle/.bashrc
if [ -f /home/oracle/.profile ]; then
        . /home/oracle/.profile
fi
EOT
```

## подготовить установщик
Создать директории:
```
mkdir /home/oracle/orainstall
mkdir /home/oracle/oracle
chown -R oracle /home
```
Скопировать установщик (linuxx64_12201_database.zip) в /home/oracle/orainstall (например, с помощью winscp)

Распаковать и выставить права:
```
unzip /home/oracle/orainstall/linuxx64_12201_database.zip -d /home/oracle/orainstall
chown -R oracle /home/oracle
```

## установка OracleDB
Выполнить действия по автоматической или графической установки из разделов ниже

Рекомендуется автоматическая установка

# 2 этап - автоматическая установка Oracle 12c

## Загрузить файл install.rsp
```
cat << EOT >>  /home/oracle/install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
oracle.install.option=INSTALL_DB_AND_CONFIG
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/home/oracle/oraInventory
ORACLE_HOME=/home/oracle/oracle/12c
ORACLE_BASE=/home/oracle/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rac.configurationType=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=false
oracle.install.db.racOneServiceName=
oracle.install.db.rac.serverpoolName=
oracle.install.db.rac.serverpoolCardinality=0
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=CarabiDB
oracle.install.db.config.starterdb.SID=CarabiDB
oracle.install.db.ConfigureAsContainerDB=false
oracle.install.db.config.PDBName=orclpdb
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=10001
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.password.ALL=syspassw0rd
oracle.install.db.config.starterdb.password.SYS=syspassw0rd
oracle.install.db.config.starterdb.password.SYSTEM=syspassw0rd
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.password.PDBADMIN=
oracle.install.db.config.starterdb.managementOption=DEFAULT
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=0
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=
oracle.install.db.config.starterdb.enableRecovery=false
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/home/oracle/oracle/oradata
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
COLLECTOR_SUPPORTHUB_URL=
EOT
```

## Выполнить первую часть установки (ПО)
```
cd /home/oracle/orainstall/database
./runInstaller -silent -responseFile /home/oracle/install.rsp
```

## Выполнить из под root
После установки runInstaller запросит выполнить эти файлы **под пользователем root**
```
/home/oracle/oraInventory/orainstRoot.sh
/home/oracle/oracle/12c/root.sh
```

## Выполнить вторую часть установки (База)
```
./runInstaller -executeConfigTools -responseFile /home/oracle/install.rsp -silent
```

## Создать tnsnames.ora
```
cat << EOT >>  /home/oracle/oracle/12c/network/admin/tnsnames.ora
CarabiDB =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = CarabiDB)(PORT = 1521))
      (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = CarabiDB) )
  )
LISTENER = (ADDRESS = (PROTOCOL = TCP)(HOST = CarabiDB)(PORT = 1521))
EOT
```

## Если база не поставилась
```
    dbca -silent -createDatabase -templateName General_Purpose.dbc \
    -gdbName CarabiDB -sid CarabiDB \
    -sysPassword syspassw0rd -systemPassword syspassw0rd \
    -pdbAdminUserName orclpdb -pdbAdminPassword syspassw0rd \
    -datafileDestination /home/oracle/oracle/oradata -redoLogFileSize 50 \
    -storageType FS -characterSet AL32UTF8 -nationalCharacterSet UTF8 \
    -sampleSchema true -emConfiguration NONE
```

## Если листенер не поставился
```
cat << EOT >>  $ORACLE_HOME/network/admin/listener.ora
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
        )
      )

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = CarabiDB)
          (ORACLE_HOME = /home/oracle/oracle/12c)
          (SID_NAME = CarabiDB)
        )
      )
EOT
```

# 2 этап (альтернатива) - графическая установка Oracle 12c

# Удаленная установка из windows

## настройка VcXsrv (Windows X Server) в windows

Скачать и установить с сайта https://sourceforge.net/projects/vcxsrv/ Запустить для ожидание подключения установщика Oracle

## настройка putty в windows

В соединении с базой в Putty включить опцию

- Connection/SSH/X11 -&gt; Enable X11 forwarding
- Сохранить соединение
- Перезагрузить сервер (?)
- Перезайти в SSH

## запуск графичеcкой установки OracleDB

Зайти в putty под пользователем oracle

```
cd /home/oracle/orainstall/database
bash ./runInstaller
```

Если все прошло успешно, появится окно инсталляции на локальной машине.

Иначе есть проблемы с X11 Forwarding.

## если не работает графика

- `yum install xorg-x11-xauth xorg-x11-utils xorg-x11-apps xorg-x11-fonts-*`
- Прописать дисплей в Putty - Дисплей указан в VcXSrv
- `export DISPLAY=[DISPLAY]` - Дисплей указан в VcXSrv

## Скриншоты установки

[![01.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/01.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/01.png)

[![02.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/02.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/02.png)

[![03.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/03.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/03.png)

[![04.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/04.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/04.png)

[![05.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/05.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/05.png)

[![06.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/06.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/06.png)

[![07.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/07.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/07.png)

[![08.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/08.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/08.png)

[![09.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/09.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/09.png)

[![10.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/10.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/10.png)

[![11.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/11.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/11.png)

[![12.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/12.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/12.png)

[![13.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/13.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/13.png)

[![14.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/14.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/14.png)

[![15.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/15.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/15.png)

[![16.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/16.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/16.png)

[![17.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/17.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/17.png)

[![18.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/18.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/18.png)

[![19.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/19.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/19.png)

[![20.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/20.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/20.png)

[![21.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/21.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/21.png)

[![22.png](https://docs.carabisol.ru/uploads/images/gallery/2025-07/scaled-1680-/22.png)](https://docs.carabisol.ru/uploads/images/gallery/2025-07/22.png)

# 3 этап - запуск OracleDB 12c для CarabiDB

## listener.ora
```
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
```

## Настройка автозапуска
**Выполнить из под  ROOT**

Замена :N на :Y в oratab:
```
sed -i 's/\/oracle\/12c:N/\/oracle\/12c:Y/g' /etc/oratab
```

Добавить сервис в systemd:
```
cat << EOT >> /etc/systemd/system/oracle-db.service
[Unit]
Description=Oracle Database(s) and Listener
Requires=network.target
[Service]
Type=forking  
RemainAfterExit=yes  
Restart=no  
KillMode=none  
TimeoutStopSec=10min  
User=oracle  
Group=oinstall  
# memlock limit is needed for SGA to use HugePages  
LimitMEMLOCK=infinity  
LimitNOFILE=65535  
# Please use absolute path here  
# First argument of dbstart is used to bring up Listener  
ExecStart=/home/oracle/oracle/12c/bin/dbstart /home/oracle/oracle/12c &
ExecStop=/home/oracle/oracle/12c/bin/dbshut /home/oracle/oracle/12c
[Install]
WantedBy=multi-user.target
EOT
```
***Включить автозапуск и перезагрузиться:***
```
chown -R oracle /home/oracle
systemctl enable oracle-db
reboot
```
### проверка подключения
```
cat /home/oracle/oracle/12c/network/admin/tnsnames.ora
```
Для подкл. CSP потребуется строка из этого файла, напр:
```
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = CarabiDB)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = CarabiDB)
    )
  )
```

### Поменять PASSWORD для sys и system
```
SQL> CONNECT sys/syspassw0rd@CarabiDB
Connected.

SQL> alter user sys identified by syspassw0rd;
SQL> alter user system identified by syspassw0rd;

```
### Установить для всех пользователей белимитный пароль
Запустить ```sqlplus /nolog```
```
SQL> CONNECT sys/syspassw0rd@CarabiDB
Connected.

SQL> alter profile DEFAULT limit password_life_time unlimited;
```


### Проверить подключение
```
SQL> CONNECT SYSTEM/syspassw0rd@CarabiDB
Connected.
SQL> SELECT * FROM HELP;
```

## Huge Pages
```
# Проверить доступные HugePages
grep HugePages /proc/meminfo
# Проверить размер страниц
grep Hugepagesize /proc/meminfo
```
### Выключить transparent hugepages

проверить
```
cat /sys/kernel/mm/transparent_hugepage/enabled
# Если always madvise [never] то все в порядке
```
Сервис для отключения transparent hugepages
```
cat > /etc/systemd/system/disable-thp.service << EOF
[Unit]
Description=Disable Transparent Huge Pages
Before=sysinit.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=sysinit.target
EOF
#Автозапуск
systemctl daemon-reload
systemctl enable disable-thp
systemctl start disable-thp
```
Затем - еще раз проверьте

#### Автоматический расчет
```
# Создать скрипт расчета
cat > /tmp/hugepages_settings.sh << 'EOF'
#!/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.
#
# This script is provided by Doc ID 401749.1 from My Oracle Support
# http://support.oracle.com

# Welcome text
echo "
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments. Before proceeding with the execution, note following:
 * For ASM instance, it needs to configure ASMM instead of AMM.
 * The 'pga_aggregate_target' is outside the SGA and
   you should accommodate this while calculating the overall size.
 * In case you changes the DB SGA size,
   as the new SGA will not fit in the previous HugePages configuration,
   it had better disable the whole HugePages,
   start the DB with new SGA size and run the script again.
And make sure that:
 * Oracle Database instance(s) are up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup
   (See Doc ID 749851.1)
 * The shared memory segments can be listed by command:
     # ipcs -m

Press Enter to proceed..."

read

# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePages size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
if [ -z "$HPG_SZ" ];then
    echo "The hugepages may not be supported in the system where the script is being executed."
    exit 1
fi

# Initialize the counter
NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | 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

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense
if [ $RES_BYTES -lt 100000000 ]; then
    echo "***********"
    echo "** ERROR **"
    echo "***********"
    echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:

    # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:
 * Oracle Database instance is up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
    exit 1
fi

# 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" ;;
    '3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '3.10') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '4.14') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
esac

# End
EOF

chmod +x /tmp/hugepages_settings.sh
```
### Настройка параметров ядра
Скрипт выше выведет, например:
```
Recommended setting: vm.nr_hugepages = 3754
```
Надо отредактировать конфигурационный файл
`mcedit /etc/sysctl.d/90-oracle.conf`
```
# Добавить или изменить следующие параметры:
vm.nr_hugepages = [Из скрипта]
# для уменьшения блокировки памяти
vm.min_free_kbytes = 1048576
```
Применить изменения:
`sysctl -p`

### Отключение AMM (Automatic Memory Management)
- Узнать сколько памяти на машине (напр через TOP)
- Память SGA = RAM / 3 * 2
- Память PGA = SGA / 4

Выполнить через sqlplus:
```
-- Отключить AMM (установить в 0)
ALTER SYSTEM SET memory_target = 0 SCOPE = BOTH;
ALTER SYSTEM SET memory_max_target = 0 SCOPE = SPFILE;

-- Установить SGA и PGA
ALTER SYSTEM SET sga_max_size = [Память SGA]G SCOPE = SPFILE;
ALTER SYSTEM SET sga_target = [Память SGA]G SCOPE = SPFILE;
ALTER SYSTEM SET pga_aggregate_target = [Память PGA]G SCOPE = SPFILE;

-- Перезапуcтить ORACLE
sqlplus /nolog 
connect / as sysdba
shutdown immediate
startup


-- Проверить текущие настройки
SHOW PARAMETER memory_target;
SHOW PARAMETER memory_max_target;
SHOW PARAMETER sga_target;
SHOW PARAMETER pga_aggregate_target;
```
И перезагрузить систему

### Проверка после перезагрузки
```
# Проверить HugePages
grep HugePages /proc/meminfo
# Ожидаемый результат:
# HugePages_Total:    4126
# HugePages_Free:     4096  (после запуска БД часть будет использована)
# HugePages_Rsvd:     XXXX
# HugePages_Surp:     0

# Проверить использование HugePages Oracle
cat /proc/meminfo | grep -i huge

# Проверить в Oracle
sqlplus / as sysdba
SQL> show parameter use_large_pages;
```

### Настройка параметра Oracle USE_LARGE_PAGES
```
# В spfile добавить параметр
ALTER SYSTEM SET use_large_pages = ONLY SCOPE = SPFILE;
```
Возможные значения:
TRUE - использовать если доступны (по умолчанию)
FALSE - не использовать
ONLY - использовать только HugePages (выдаст ошибку если недостаточно)
AUTO - автоматическое управление

### Мониторинг использования HugePages
```
# Скрипт для мониторинга
cat > /tmp/check_hugepages.sh << 'EOF'
#!/bin/bash
echo "=== HugePages Status ==="
grep -E "HugePages_Total|HugePages_Free|HugePages_Rsvd" /proc/meminfo

echo -e "\n=== Oracle Processes using HugePages ==="
ipcs -m | awk '{print $2}' | xargs -I {} grep -l {} /proc/*/maps 2>/dev/null | cut -d/ -f3 | sort -u | xargs -I {} ps -p {} -o pid,user,cmd | grep -v PID

echo -e "\n=== Total HugePages used by Oracle ==="
for PID in `pgrep -u oracle`; do
    if [ -f /proc/$PID/smaps ]; then
        grep -B11 -A8 'KernelPageSize: 2048 kB' /proc/$PID/smaps | grep -E "^Size:|^Rss:" | awk '{if(NR%2) size+=$2; else rss+=$2} END{print "PID: " $PID " Size: " size " kB, RSS: " rss " kB"}'
    fi
done 2>/dev/null
EOF

chmod +x /tmp/check_hugepages.sh
```

# 4 этап - инициализация базы CarabiDB

## Шаг 1. Поменять поле [USER],[PASSWORD],[UTL_FLIE_DIR],[BACKUP_DIR]
```
mkdir /home/oracle/utlfile
mkdir /home/oracle/backup
export NEWUSER=csptest
export NEWPASSWORD=carabi2002
export UTL_FLIE_DIR=/home/oracle/utlfile
export BACKUP_DIR=/home/oracle/backup
```
```
rm -f /home/oracle/create-user.sql
cat << EOT >> /home/oracle/create-user.sql
create user $NEWUSER
  identified by $NEWPASSWORD
  default tablespace USERS
  temporary tablespace TEMP
  quota unlimited on sysaux
  quota unlimited on system
  quota unlimited on users
  profile DEFAULT;

-- Grant/Revoke role privileges 
grant connect to $NEWUSER;
grant resource, ctxapp to $NEWUSER;
grant imp_full_database to $NEWUSER;

-- Grant/Revoke system privileges 
grant create procedure to $NEWUSER;
grant create sequence to $NEWUSER;
grant create synonym to $NEWUSER;
grant create table to $NEWUSER;
grant create trigger to $NEWUSER;
grant create type to $NEWUSER;
grant create view to $NEWUSER;
grant alter system to $NEWUSER;
grant alter session to $NEWUSER;
grant debug any procedure to $NEWUSER;
grant debug connect session to $NEWUSER;

-- Grant/Revoke objects
grant select on sys.v_\$lock to $NEWUSER;
grant execute on SYS.DBMS_LOGMNR to $NEWUSER;
grant execute on SYS.DBMS_PROFILER to $NEWUSER;
grant select on SYS.V_\$LOGMNR_CONTENTS to $NEWUSER;
grant select on SYS.V_\$MYSTAT to $NEWUSER;
grant select on SYS.V_\$LOGFILE to $NEWUSER;
grant select on SYS.V_\$OPEN_CURSOR to $NEWUSER;
grant select on SYS.V_\$SESSION to $NEWUSER;
grant select on SYS.V_\$PROCESS to $NEWUSER;
grant select on SYS.DBMS_LOCK_ALLOCATED to $NEWUSER;

-- Grant/Revoke Java privileges
call dbms_java.grant_permission( UPPER('$NEWUSER'), 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );
call dbms_java.grant_permission( UPPER('$NEWUSER'), 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'write' );
call dbms_java.grant_permission( UPPER('$NEWUSER'), 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'read' );
call dbms_java.grant_permission( UPPER('$NEWUSER'), 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '' );
call dbms_java.grant_permission( UPPER('$NEWUSER'), 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '' );
call dbms_java.grant_permission(UPPER('$NEWUSER'), 'SYS:java.net.SocketPermission', '*', 'accept,connect,listen,resolve');
grant execute on SYS.DBMS_BACKUP_RESTORE to $NEWUSER;

-- Job Privileges
grant all on sys.dbms_job to $NEWUSER;
grant all on sys.dba_jobs to $NEWUSER;
grant all on sys.dba_jobs_running to $NEWUSER;
grant execute on sys.dbms_lock to $NEWUSER;
grant all on sys.DBMS_CRYPTO to $NEWUSER;

--- Создание директории для XML импортов.
create or replace directory UTL_FILE_DIR as '$UTL_FLIE_DIR';
grant all on directory UTL_FILE_DIR to $NEWUSER;

-- Для BACKUP - место для резервного хранилища БД
create or replace directory backup as '$BACKUP_DIR';
grant all on directory backup to $NEWUSER;
EOT
```
```
echo exit | sqlplus SYS/syspassw0rd@CarabiDB as SYSDBA @create-user.sql
```
## шаг 2. Сделать пароль бесконечным
```
alter profile DEFAULT limit password_life_time unlimited;
```

## шаг 3. Импортировать схему carabi (в директории [BACKUP_DIR] должен лежать архив carabi7.dmp.gz  )
**[PASSWORD],[OLD_USER],[USER],[FILENAME.dmp]** 
```
export DUMP_FILENAME=FILENAME.dmp
gzip -d ${DUMP_FILENAME}.gz 
impdp system/syspassw0rd@CarabiDB \
 remap_schema=csptest:csptest \
 directory=BACKUP \
 dumpfile=${DUMP_FILENAME} \
 logfile=${DUMP_FILENAME}.log \
 TABLE_EXISTS_ACTION=REPLACE \
 TRANSFORM=OID:N
```

# 5 этап - Automating Oracle database Shutdown and Startup by systemd

### Huge Pages on Oracle Linux
```
# Проверить доступные HugePages
grep HugePages /proc/meminfo
# Проверить размер страниц
grep Hugepagesize /proc/meminfo
```
#### Выключить transparent hugepages

проверить
```
cat /sys/kernel/mm/transparent_hugepage/enabled
# Если always madvise [never] то все в порядке
```
Сервис для отключения transparent hugepages
```
cat > /etc/systemd/system/disable-thp.service << EOF
[Unit]
Description=Disable Transparent Huge Pages
Before=sysinit.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=sysinit.target
EOF
#Автозапуск
systemctl daemon-reload
systemctl enable disable-thp
systemctl start disable-thp
```
Затем - еще раз проверьте

#### Автоматический расчет
```
# Создать скрипт расчета
cat > /tmp/hugepages_settings.sh << 'EOF'
#!/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.
#
# This script is provided by Doc ID 401749.1 from My Oracle Support
# http://support.oracle.com

# Welcome text
echo "
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments. Before proceeding with the execution, note following:
 * For ASM instance, it needs to configure ASMM instead of AMM.
 * The 'pga_aggregate_target' is outside the SGA and
   you should accommodate this while calculating the overall size.
 * In case you changes the DB SGA size,
   as the new SGA will not fit in the previous HugePages configuration,
   it had better disable the whole HugePages,
   start the DB with new SGA size and run the script again.
And make sure that:
 * Oracle Database instance(s) are up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup
   (See Doc ID 749851.1)
 * The shared memory segments can be listed by command:
     # ipcs -m

Press Enter to proceed..."

read

# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePages size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
if [ -z "$HPG_SZ" ];then
    echo "The hugepages may not be supported in the system where the script is being executed."
    exit 1
fi

# Initialize the counter
NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | 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

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense
if [ $RES_BYTES -lt 100000000 ]; then
    echo "***********"
    echo "** ERROR **"
    echo "***********"
    echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:

    # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:
 * Oracle Database instance is up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
    exit 1
fi

# 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" ;;
    '3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '3.10') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    '4.14') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
esac

# End
EOF

chmod +x /tmp/hugepages_settings.sh
```

##### Quick checking

```
# cat /proc/sys/vm/nr_hugepages
2054
```

or

```
# cat /proc/meminfo | grep Huge
AnonHugePages:         0 kB
HugePages_Total:    2054
HugePages_Free:      546
HugePages_Rsvd:      542
HugePages_Surp:        0
Hugepagesize:       2048 kB

```

#### Checking if transparent huge pages are disabled
```
# cat /sys/kernel/mm/transparent_hugepage/enabled`  
always madvise [never]`  
Viewing database 12.1 alert log  
**********************************************************************
Dump of system resources acquired for SHARED GLOBAL AREA (SGA)
Per process system memlock (soft) limit = 128G
Expected per process system memlock (soft) limit to lock
SHARED GLOBAL AREA (SGA) into memory: 2050M
Available system pagesizes:
4K, 2048K``Mon Oct 16 12:28:54 2017
Supported system pagesize(s):
PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)
   4K       Configured               3               3        NONE
2048K             2054            1025            1025        NONE
**********************************************************************
```
Viewing database 11.2 alert log
```
************************ Large Pages Information *******************
Per process system memlock (soft) limit = 128 GB
Total Shared Global Region in Large Pages = 2050 MB (100%)
Large Pages used by this instance: 1025 (2050 MB)
Large Pages unused system wide = 4 (8192 KB)
Large Pages configured system wide = 2054 (4108 MB)
Large Page size = 2048 KB
********************************************************************
If number of Huge pages is less than required, than SGA will use both page types. Database 12.1 aler.log:
  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)
        4K       Configured               3       187704        NONE
     2048K              659            1025             658        NONE
```
##### Simplified setup

1. Have the memlock user limit set in /etc/security/limits.conf file. Set the value (in KB) slightly smaller than total RAM (90%) , at least it must be bigger than HugePages size.`  
`*   soft   memlock    14680064`  
`*   hard   memlock    14680064`  
`Atentu! If you use systemd to auto startup databases, systemd ignores limits.conf. You need to add the following to a service unit file
```
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
```
2. Get the required number of pages from alert.log (EXPECTED_PAGES) or by running Oracle script hugepages_settings.sh (Doc ID 401749.1)
3. edit vm.nr_hugepages in /etc/sysctl.conf as root
4. to reload the parameters, reboot Linux or use sysctl -p
Proper setup and more info
```
HugePages on Oracle Linux 64-bit (Doc ID 361468.1)
HugePages on Linux: What It Is... and What It Is Not... (Doc ID 361323.1)
Oracle Linux: Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)
```
##### Automating by systemd

alternatives are Oracle Restart or SysV init ( /etc/init.d in older Linux).  
Service Unit file typically has extension .service and stored in  
/usr/lib/systemd/system  
/etc/systemd/system  
/usr/lib/systemd/user  
/etc/systemd/user  
  
Create or edit a service unit file:
```
cd /etc/systemd/system  
vi oracle\_database.service  
[Unit]  
Description=The Oracle Database Service  
After=network.target  
  
[Service]  
Type=forking  
RemainAfterExit=yes  
KillMode=none  
TimeoutStopSec=10min  
# memlock limit is needed for SGA to use HugePages  
LimitMEMLOCK=infinity  
LimitNOFILE=65535  
  
User=oracle  
Group=oinstall  
# Please use absolute path here  
# ExecStart=$ORACLE\_HOME/bin/dbstart $ORACLE\_HOME &amp;  
# First argument of dbstart is used to bring up Listener  
ExecStart=/opt/oracle/product/12.1.0/se2\_1/bin/dbstart /opt/oracle/product/12.1.0/se2\_1 &amp;  
ExecStop=/opt/oracle/product/12.1.0/se2\_1/bin/dbshut /opt/oracle/product/12.1.0/se2\_1  
Restart=no  
  
[Install]
# Puts wants directive for the other units in the relationship  
  
WantedBy=default.target
```

<div id="bkmrk-">  
</div><div id="bkmrk-first-argument-of-db">First argument of dbstart/dbshut is used to bring up/shutdown Oracle Listener. This script will start all databases listed in the /etc/oratab file whose third field is a "Y". If you use ASM or cluster services, read more in dbstart description.  

Источник: https://alexzy.blogspot.com/2017/10/
  
**Huge Pages**  
systemd ignores /etc/security/limits.conf. If HugePages are configured, you need to use LimitMEMLOCK and LimitNOFILE, otherwise SGA will use small pages and database alert log will show:</div><div id="bkmrk-%C2%A0increase-per-proces"> Increase per process memlock (soft) limit to at least 2050MB to lock 100% of SHARED GLOBAL AREA (SGA) pages into physical memory  
  
</div>**TimeoutStopSec**= Configures the time to wait for stop. If a service is asked to stop, but does not terminate in the specified time, it will be terminated forcibly via SIGTERM, and after another timeout of equal duration with SIGKILL (see KillMode= in systemd.kill(5)). Takes a unit-less value in seconds, or a time span value such as "5min 20s". Pass "infinity" to disable the timeout logic. Defaults to DefaultTimeoutStopSec= from the manager configuration file (see systemd-system.conf(5)).  
For more info use  
man systemd.service  
  
reload systemd and enable the service:  
systemctl daemon-reload  
systemctl enable oracle\_database.service  
list services:  
systemctl list-unit-files --type service|grep oracle  
Start the service and check its status  
systemctl start oracle\_database.service  
systemctl status oracle\_database.service

Источник: [Huge Pages on Oracle Linux](https://alexzy.blogspot.com/2017/10/huge-pages-on-oracle-linux.html)