oracle migrare
This commit is contained in:
315
oracle/migration-scripts/00-install-oracle21c-xe.sh
Normal file
315
oracle/migration-scripts/00-install-oracle21c-xe.sh
Normal file
@@ -0,0 +1,315 @@
|
||||
#!/bin/bash
|
||||
#==============================================================================
|
||||
# Script: 00-install-oracle21c-xe.sh
|
||||
# Descriere: Instalare completă Oracle 21c XE în Docker pe LXC Proxmox
|
||||
# - Instalează Docker (dacă nu există)
|
||||
# - Instalează Oracle 21c XE
|
||||
# - Șterge XEPDB1 automat
|
||||
# - Creează PDB ROA (și opțional PDB ROA2)
|
||||
# Data: 30 Septembrie 2025
|
||||
# Rulare: bash 00-install-oracle21c-xe.sh
|
||||
# Unde: Pe host Proxmox (sau în LXC prin pct exec)
|
||||
#==============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "INSTALARE ORACLE 21c XE PE LXC + DOCKER"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Configurare
|
||||
ORACLE_PWD="OraclePass123"
|
||||
LXC_ID="108"
|
||||
PROXMOX_HOST="10.0.20.201"
|
||||
CONTAINER_NAME="oracle-xe"
|
||||
ORACLE_IMAGE="container-registry.oracle.com/database/express:21.3.0-xe"
|
||||
|
||||
# Verificare dacă rulează pe Proxmox sau trebuie SSH
|
||||
if [ -f "/etc/pve/.version" ]; then
|
||||
echo "✓ Rulează direct pe Proxmox host"
|
||||
PVE_CMD=""
|
||||
else
|
||||
echo "Conectare la Proxmox ${PROXMOX_HOST}..."
|
||||
PVE_CMD="ssh root@${PROXMOX_HOST}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "PASUL 1/7: VERIFICARE LXC ${LXC_ID}"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Verificare LXC există
|
||||
if ! ${PVE_CMD} pct status ${LXC_ID} &>/dev/null; then
|
||||
echo "ERROR: LXC ${LXC_ID} nu există!"
|
||||
echo ""
|
||||
echo "Creează LXC manual:"
|
||||
echo " pct create ${LXC_ID} local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \\"
|
||||
echo " --hostname oracle-db \\"
|
||||
echo " --memory 8192 \\"
|
||||
echo " --cores 4 \\"
|
||||
echo " --rootfs local-lvm:32 \\"
|
||||
echo " --net0 name=eth0,bridge=vmbr0,ip=dhcp \\"
|
||||
echo " --features nesting=1,keyctl=1"
|
||||
echo " pct start ${LXC_ID}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start LXC dacă e oprit
|
||||
if ! ${PVE_CMD} pct status ${LXC_ID} | grep -q "running"; then
|
||||
echo "Pornire LXC ${LXC_ID}..."
|
||||
${PVE_CMD} pct start ${LXC_ID}
|
||||
sleep 5
|
||||
fi
|
||||
|
||||
echo "✓ LXC ${LXC_ID} activ"
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 2/7: INSTALARE DOCKER"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Verificare Docker instalat
|
||||
if ${PVE_CMD} pct exec ${LXC_ID} -- which docker &>/dev/null; then
|
||||
echo "✓ Docker deja instalat"
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker --version
|
||||
else
|
||||
echo "Instalare Docker..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- bash -c '
|
||||
# Update package list
|
||||
apt-get update
|
||||
|
||||
# Install prerequisites
|
||||
apt-get install -y \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
lsb-release
|
||||
|
||||
# Add Docker GPG key
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
|
||||
# Add Docker repository
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
|
||||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
# Install Docker
|
||||
apt-get update
|
||||
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
|
||||
# Enable and start Docker
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
|
||||
echo "Docker version:"
|
||||
docker --version
|
||||
'
|
||||
echo "✓ Docker instalat"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 3/7: DOWNLOAD ORACLE 21c XE IMAGE"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Verificare dacă image-ul există
|
||||
if ${PVE_CMD} pct exec ${LXC_ID} -- docker images | grep -q "express.*21.3.0-xe"; then
|
||||
echo "✓ Oracle XE image deja descărcat"
|
||||
else
|
||||
echo "Download Oracle 21c XE image (~ 2-3 GB)..."
|
||||
echo "Durată estimată: 5-15 minute (depinde de conexiune)"
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker pull ${ORACLE_IMAGE}
|
||||
echo "✓ Oracle XE image descărcat"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 4/7: OPRIRE CONTAINER VECHI (dacă există)"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
if ${PVE_CMD} pct exec ${LXC_ID} -- docker ps -a | grep -q ${CONTAINER_NAME}; then
|
||||
echo "Oprire și ștergere container vechi ${CONTAINER_NAME}..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker stop ${CONTAINER_NAME} 2>/dev/null || true
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker rm ${CONTAINER_NAME} 2>/dev/null || true
|
||||
echo "✓ Container vechi șters"
|
||||
else
|
||||
echo "✓ Nu există container vechi"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 5/7: START ORACLE 21c XE CONTAINER"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Creare directoare pentru date
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- mkdir -p /opt/oracle/oradata
|
||||
|
||||
echo "Pornire container Oracle XE..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker run -d \
|
||||
--name ${CONTAINER_NAME} \
|
||||
--restart=unless-stopped \
|
||||
-p 1521:1521 \
|
||||
-p 5500:5500 \
|
||||
-e ORACLE_PWD=${ORACLE_PWD} \
|
||||
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||
${ORACLE_IMAGE}
|
||||
|
||||
echo "✓ Container pornit"
|
||||
echo ""
|
||||
echo "Așteptare inițializare Oracle (~ 5-10 minute)..."
|
||||
echo "Monitorizare log: docker logs -f ${CONTAINER_NAME}"
|
||||
echo ""
|
||||
|
||||
# Așteptare până când Oracle este gata
|
||||
TIMEOUT=600 # 10 minute
|
||||
ELAPSED=0
|
||||
INTERVAL=10
|
||||
|
||||
while [ $ELAPSED -lt $TIMEOUT ]; do
|
||||
if ${PVE_CMD} pct exec ${LXC_ID} -- docker logs ${CONTAINER_NAME} 2>&1 | grep -q "DATABASE IS READY TO USE"; then
|
||||
echo ""
|
||||
echo "✓ Oracle 21c XE READY!"
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
sleep $INTERVAL
|
||||
ELAPSED=$((ELAPSED + INTERVAL))
|
||||
done
|
||||
|
||||
if [ $ELAPSED -ge $TIMEOUT ]; then
|
||||
echo ""
|
||||
echo "ERROR: Timeout așteptând Oracle să pornească!"
|
||||
echo "Verifică log-urile: docker logs ${CONTAINER_NAME}"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 6/7: ȘTERGERE XEPDB1 + CREARE PDB ROA"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
echo "Conectare la CDB și ștergere XEPDB1..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<'EOF'
|
||||
SET SERVEROUTPUT ON
|
||||
WHENEVER SQLERROR CONTINUE
|
||||
|
||||
-- Închide și șterge XEPDB1
|
||||
ALTER PLUGGABLE DATABASE xepdb1 CLOSE IMMEDIATE;
|
||||
DROP PLUGGABLE DATABASE xepdb1 INCLUDING DATAFILES;
|
||||
|
||||
-- Verificare că XEPDB1 a fost șters
|
||||
SELECT 'PDB după ștergere XEPDB1:' FROM DUAL;
|
||||
SELECT name, open_mode FROM v$pdbs;
|
||||
|
||||
EXIT;
|
||||
EOF
|
||||
echo "✓ XEPDB1 șters"
|
||||
echo ""
|
||||
|
||||
echo "Creare PDB ROA..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<EOF
|
||||
SET SERVEROUTPUT ON
|
||||
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||
|
||||
-- Creare PDB ROA
|
||||
CREATE PLUGGABLE DATABASE roa
|
||||
ADMIN USER pdb_admin IDENTIFIED BY ${ORACLE_PWD}
|
||||
FILE_NAME_CONVERT=('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/roa/');
|
||||
|
||||
-- Deschide PDB ROA
|
||||
ALTER PLUGGABLE DATABASE roa OPEN;
|
||||
ALTER PLUGGABLE DATABASE roa SAVE STATE;
|
||||
|
||||
-- Verificare
|
||||
SELECT name, open_mode FROM v\$pdbs WHERE name='ROA';
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('✓ PDB ROA creat și deschis!');
|
||||
|
||||
EXIT;
|
||||
EOF
|
||||
echo "✓ PDB ROA creat"
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "PASUL 7/7: PDB ROA2 (OPȚIONAL)"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
read -p "Vrei să creezi și PDB ROA2? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Creare PDB ROA2..."
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<EOF
|
||||
SET SERVEROUTPUT ON
|
||||
WHENEVER SQLERROR CONTINUE
|
||||
|
||||
-- Creare PDB ROA2
|
||||
CREATE PLUGGABLE DATABASE roa2
|
||||
ADMIN USER pdb_admin IDENTIFIED BY ${ORACLE_PWD}
|
||||
FILE_NAME_CONVERT=('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/roa2/');
|
||||
|
||||
-- Deschide PDB ROA2
|
||||
ALTER PLUGGABLE DATABASE roa2 OPEN;
|
||||
ALTER PLUGGABLE DATABASE roa2 SAVE STATE;
|
||||
|
||||
-- Verificare
|
||||
SELECT name, open_mode FROM v\$pdbs WHERE name='ROA2';
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('✓ PDB ROA2 creat și deschis!');
|
||||
|
||||
EXIT;
|
||||
EOF
|
||||
echo "✓ PDB ROA2 creat"
|
||||
else
|
||||
echo "✓ PDB ROA2 omis"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "✅ INSTALARE ORACLE 21c XE COMPLETĂ!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Detalii instalare:"
|
||||
echo " - LXC: ${LXC_ID}"
|
||||
echo " - Container: ${CONTAINER_NAME}"
|
||||
echo " - CDB: XE"
|
||||
echo " - PDB: ROA (și ROA2 dacă ai creat)"
|
||||
echo " - XEPDB1: ȘTERS"
|
||||
echo ""
|
||||
echo "Conexiuni:"
|
||||
echo " - CDB: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/XE as sysdba"
|
||||
echo " - PDB ROA: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/roa as sysdba"
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo " - PDB ROA2: sys/${ORACLE_PWD}@${PROXMOX_HOST}:1521/roa2 as sysdba"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Test conexiune:"
|
||||
echo " ${PVE_CMD} pct exec ${LXC_ID} -- docker exec -it ${CONTAINER_NAME} sqlplus sys/${ORACLE_PWD}@localhost:1521/roa as sysdba"
|
||||
echo ""
|
||||
echo "Verificare PDB-uri:"
|
||||
${PVE_CMD} pct exec ${LXC_ID} -- docker exec ${CONTAINER_NAME} sqlplus -s sys/${ORACLE_PWD}@localhost:1521/XE as sysdba <<'EOF'
|
||||
SET PAGESIZE 50
|
||||
SELECT con_id, name, open_mode, restricted FROM v$pdbs ORDER BY con_id;
|
||||
EXIT;
|
||||
EOF
|
||||
echo ""
|
||||
echo "Management container:"
|
||||
echo " Start: ${PVE_CMD} pct exec ${LXC_ID} -- docker start ${CONTAINER_NAME}"
|
||||
echo " Stop: ${PVE_CMD} pct exec ${LXC_ID} -- docker stop ${CONTAINER_NAME}"
|
||||
echo " Logs: ${PVE_CMD} pct exec ${LXC_ID} -- docker logs -f ${CONTAINER_NAME}"
|
||||
echo " Shell: ${PVE_CMD} pct exec ${LXC_ID} -- docker exec -it ${CONTAINER_NAME} bash"
|
||||
echo ""
|
||||
echo "Următorul pas: 01-setup-oracle21c.sh (pentru tablespace + useri)"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user