oracle install LXC docker
This commit is contained in:
261
system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh
Normal file
261
system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Script pentru instalare Oracle XE 21c în Docker LXC (Proxmox)
|
||||||
|
# Rulează DUPĂ crearea containerului Docker LXC cu scriptul comunității
|
||||||
|
#
|
||||||
|
# Utilizare:
|
||||||
|
# 1. Creează mai întâi Docker LXC cu: bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)"
|
||||||
|
# - Alege: Privileged (Yes)
|
||||||
|
# - RAM: minim 4096 MB (recomandat 6144 MB)
|
||||||
|
# - Disk: minim 20 GB
|
||||||
|
# - Cores: minim 2
|
||||||
|
# 2. Copiază acest script în container și rulează-l
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configurări
|
||||||
|
ORACLE_PASSWORD="${ORACLE_PASSWORD:-OraclePass123}"
|
||||||
|
ORACLE_PORT="${ORACLE_PORT:-1521}"
|
||||||
|
ORACLE_EM_PORT="${ORACLE_EM_PORT:-5500}"
|
||||||
|
CONTAINER_NAME="oracle-xe"
|
||||||
|
APP_USER="appuser"
|
||||||
|
APP_PASSWORD="${APP_PASSWORD:-AppPass123}"
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "Oracle XE 21c Docker Deployment Script"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
echo "Configurări:"
|
||||||
|
echo " - Container Name: $CONTAINER_NAME"
|
||||||
|
echo " - Oracle SYS Password: $ORACLE_PASSWORD"
|
||||||
|
echo " - Oracle Port: $ORACLE_PORT"
|
||||||
|
echo " - Enterprise Manager Port: $ORACLE_EM_PORT"
|
||||||
|
echo " - App User: $APP_USER"
|
||||||
|
echo " - App Password: $APP_PASSWORD"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Verificare Docker
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo "❌ Docker nu este instalat! Asigură-te că ai creat containerul cu scriptul Docker LXC."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Docker este instalat: $(docker --version)"
|
||||||
|
|
||||||
|
# Verificare dacă containerul Oracle XE există deja
|
||||||
|
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||||||
|
echo "⚠️ Containerul $CONTAINER_NAME există deja."
|
||||||
|
read -p "Dorești să-l ștergi și să creezi unul nou? (y/n): " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Ștergere container existent..."
|
||||||
|
docker stop $CONTAINER_NAME 2>/dev/null || true
|
||||||
|
docker rm $CONTAINER_NAME 2>/dev/null || true
|
||||||
|
echo "✅ Container șters"
|
||||||
|
else
|
||||||
|
echo "Script anulat."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Creare directoare pentru persistență
|
||||||
|
echo ""
|
||||||
|
echo "📁 Creare directoare pentru persistență..."
|
||||||
|
mkdir -p /opt/oracle/oradata
|
||||||
|
mkdir -p /opt/oracle/scripts/setup
|
||||||
|
mkdir -p /opt/oracle/scripts/startup
|
||||||
|
chmod -R 777 /opt/oracle
|
||||||
|
echo "✅ Directoare create"
|
||||||
|
|
||||||
|
# Download imagine Oracle XE
|
||||||
|
echo ""
|
||||||
|
echo "📥 Download imagine Oracle XE 21c (poate dura câteva minute)..."
|
||||||
|
if docker pull container-registry.oracle.com/database/express:21.3.0-xe; then
|
||||||
|
echo "✅ Imagine descărcată cu succes"
|
||||||
|
else
|
||||||
|
echo "❌ Eroare la descărcare imagine. Verifică conexiunea la internet."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Creare script de inițializare pentru user-ul aplicației
|
||||||
|
echo ""
|
||||||
|
echo "📝 Creare script de inițializare..."
|
||||||
|
cat > /opt/oracle/scripts/startup/01_create_app_user.sql <<EOF
|
||||||
|
-- Creare user pentru aplicații
|
||||||
|
ALTER SESSION SET "_ORACLE_SCRIPT"=true;
|
||||||
|
|
||||||
|
-- Drop user dacă există
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'DROP USER ${APP_USER} CASCADE';
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Creare user nou
|
||||||
|
CREATE USER ${APP_USER} IDENTIFIED BY "${APP_PASSWORD}";
|
||||||
|
GRANT CONNECT, RESOURCE TO ${APP_USER};
|
||||||
|
GRANT CREATE SESSION TO ${APP_USER};
|
||||||
|
GRANT CREATE TABLE TO ${APP_USER};
|
||||||
|
GRANT CREATE VIEW TO ${APP_USER};
|
||||||
|
GRANT CREATE PROCEDURE TO ${APP_USER};
|
||||||
|
GRANT CREATE SEQUENCE TO ${APP_USER};
|
||||||
|
GRANT UNLIMITED TABLESPACE TO ${APP_USER};
|
||||||
|
GRANT SELECT ANY DICTIONARY TO ${APP_USER};
|
||||||
|
|
||||||
|
-- Afișare confirmare
|
||||||
|
SELECT 'User ${APP_USER} created successfully' AS status FROM dual;
|
||||||
|
EXIT;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "✅ Script de inițializare creat"
|
||||||
|
|
||||||
|
# Rulare container Oracle XE
|
||||||
|
echo ""
|
||||||
|
echo "🚀 Pornire container Oracle XE..."
|
||||||
|
docker run -d \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
-p $ORACLE_PORT:1521 \
|
||||||
|
-p $ORACLE_EM_PORT:5500 \
|
||||||
|
-e ORACLE_PWD=$ORACLE_PASSWORD \
|
||||||
|
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||||
|
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||||
|
-v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \
|
||||||
|
-v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--shm-size=1g \
|
||||||
|
container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
|
||||||
|
echo "✅ Container pornit"
|
||||||
|
|
||||||
|
# Așteptare până DB este ready
|
||||||
|
echo ""
|
||||||
|
echo "⏳ Așteptare inițializare bază de date (poate dura 5-10 minute)..."
|
||||||
|
echo " Monitorizare logs în timp real..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Funcție pentru verificare status
|
||||||
|
check_db_ready() {
|
||||||
|
docker logs $CONTAINER_NAME 2>&1 | grep -q "DATABASE IS READY TO USE!" && return 0 || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Monitorizare logs cu timeout
|
||||||
|
TIMEOUT=600 # 10 minute
|
||||||
|
ELAPSED=0
|
||||||
|
INTERVAL=10
|
||||||
|
|
||||||
|
while [ $ELAPSED -lt $TIMEOUT ]; do
|
||||||
|
if check_db_ready; then
|
||||||
|
echo ""
|
||||||
|
echo "✅ Baza de date este gata!"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo -ne "\r⏳ Așteptare... ${ELAPSED}s / ${TIMEOUT}s"
|
||||||
|
sleep $INTERVAL
|
||||||
|
ELAPSED=$((ELAPSED + INTERVAL))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ELAPSED -ge $TIMEOUT ]; then
|
||||||
|
echo ""
|
||||||
|
echo "❌ Timeout la inițializare. Verifică logs cu: docker logs $CONTAINER_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Test conexiune
|
||||||
|
echo ""
|
||||||
|
echo "🔍 Verificare conexiune la baza de date..."
|
||||||
|
sleep 5 # Extra timp pentru stabilizare
|
||||||
|
|
||||||
|
# Test conexiune SYS
|
||||||
|
if docker exec $CONTAINER_NAME sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba <<< "SELECT 'Connected' FROM dual;" | grep -q "Connected"; then
|
||||||
|
echo "✅ Conexiune SYS funcțională"
|
||||||
|
else
|
||||||
|
echo "❌ Nu se poate conecta ca SYS"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Test conexiune APP USER
|
||||||
|
if docker exec $CONTAINER_NAME sqlplus -s $APP_USER/$APP_PASSWORD@localhost:1521/XE <<< "SELECT 'Connected' FROM dual;" 2>/dev/null | grep -q "Connected"; then
|
||||||
|
echo "✅ User $APP_USER funcțional"
|
||||||
|
else
|
||||||
|
echo "⚠️ User $APP_USER nu există încă (normal la prima rulare)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Obținere IP container
|
||||||
|
echo ""
|
||||||
|
echo "📊 Informații de conexiune:"
|
||||||
|
echo "=========================================="
|
||||||
|
IP_ADDRESS=$(hostname -I | awk '{print $1}')
|
||||||
|
echo "IP Container LXC: $IP_ADDRESS"
|
||||||
|
echo "Port Oracle: $ORACLE_PORT"
|
||||||
|
echo "Port Enterprise Manager: $ORACLE_EM_PORT"
|
||||||
|
echo ""
|
||||||
|
echo "String-uri de conexiune:"
|
||||||
|
echo " SQL*Plus (SYS): sqlplus sys/$ORACLE_PASSWORD@$IP_ADDRESS:$ORACLE_PORT/XE as sysdba"
|
||||||
|
echo " SQL*Plus (App): sqlplus $APP_USER/$APP_PASSWORD@$IP_ADDRESS:$ORACLE_PORT/XE"
|
||||||
|
echo " JDBC URL: jdbc:oracle:thin:@$IP_ADDRESS:$ORACLE_PORT:XE"
|
||||||
|
echo " Enterprise Manager: http://$IP_ADDRESS:$ORACLE_EM_PORT/em"
|
||||||
|
echo " User/Pass EM: sys/$ORACLE_PASSWORD (connect as SYSDBA)"
|
||||||
|
echo ""
|
||||||
|
echo "Conexiune din WSL/Windows:"
|
||||||
|
echo " Folosește IP-ul: $IP_ADDRESS în loc de localhost"
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# Creare script helper pentru management
|
||||||
|
echo ""
|
||||||
|
echo "📝 Creare scripturi helper..."
|
||||||
|
|
||||||
|
# Script status
|
||||||
|
cat > /usr/local/bin/oracle-status <<'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
echo "=== Oracle XE Status ==="
|
||||||
|
docker ps --filter "name=oracle-xe" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||||||
|
echo ""
|
||||||
|
echo "=== Database Status ==="
|
||||||
|
docker exec oracle-xe lsnrctl status 2>/dev/null | grep -E "Instance|Service|Listening" || echo "Listener not ready"
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-status
|
||||||
|
|
||||||
|
# Script SQL*Plus
|
||||||
|
cat > /usr/local/bin/oracle-sqlplus <<EOF
|
||||||
|
#!/bin/bash
|
||||||
|
docker exec -it oracle-xe sqlplus sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-sqlplus
|
||||||
|
|
||||||
|
# Script logs
|
||||||
|
cat > /usr/local/bin/oracle-logs <<'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
docker logs -f oracle-xe
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-logs
|
||||||
|
|
||||||
|
# Script restart
|
||||||
|
cat > /usr/local/bin/oracle-restart <<'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
echo "Restarting Oracle XE..."
|
||||||
|
docker restart oracle-xe
|
||||||
|
echo "Done. Check status with: oracle-status"
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-restart
|
||||||
|
|
||||||
|
echo "✅ Scripturi helper create:"
|
||||||
|
echo " - oracle-status : Verifică status-ul Oracle XE"
|
||||||
|
echo " - oracle-sqlplus : Conectare rapidă SQL*Plus ca SYS"
|
||||||
|
echo " - oracle-logs : Vizualizare logs în timp real"
|
||||||
|
echo " - oracle-restart : Restart container Oracle XE"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
echo "✅ INSTALARE COMPLETĂ!"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
echo "Pentru a verifica status-ul: oracle-status"
|
||||||
|
echo "Pentru SQL*Plus rapid: oracle-sqlplus"
|
||||||
|
echo ""
|
||||||
|
echo "IMPORTANT: Salvează parolele în siguranță!"
|
||||||
|
echo " - SYS Password: $ORACLE_PASSWORD"
|
||||||
|
echo " - App Password: $APP_PASSWORD"
|
||||||
|
echo ""
|
||||||
316
system_instructions/oracle/oracle-xe-complete-setup.sh
Normal file
316
system_instructions/oracle/oracle-xe-complete-setup.sh
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Oracle XE 21c Complete Setup Script for Docker LXC on Proxmox
|
||||||
|
# This script creates a Docker LXC container and installs Oracle XE with custom PDBs (ROA and ROA2)
|
||||||
|
#
|
||||||
|
# Prerequisites:
|
||||||
|
# - Proxmox VE server with IP 10.0.20.201
|
||||||
|
# - SSH access to Proxmox as root
|
||||||
|
# - At least 20GB storage and 4GB RAM available
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./oracle-xe-complete-setup.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
PROXMOX_IP="10.0.20.201"
|
||||||
|
CONTAINER_ID="108"
|
||||||
|
CONTAINER_NAME="central-oracle"
|
||||||
|
CONTAINER_IP="" # Will be obtained after creation
|
||||||
|
ORACLE_PASSWORD="OraclePass123"
|
||||||
|
PDB_ADMIN_PASSWORD="AdminPass123"
|
||||||
|
ROA_USER_PASSWORD="RoaPass123"
|
||||||
|
ROA2_USER_PASSWORD="Roa2Pass123"
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "Oracle XE 21c Complete Setup Script"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 1: Create Docker LXC Container using community script
|
||||||
|
echo "📦 Step 1: Creating Docker LXC Container..."
|
||||||
|
echo "This will open an interactive menu. Please select:"
|
||||||
|
echo " - Operating System: debian"
|
||||||
|
echo " - Version: 12"
|
||||||
|
echo " - Container Type: Unprivileged"
|
||||||
|
echo " - Container ID: $CONTAINER_ID"
|
||||||
|
echo " - Hostname: $CONTAINER_NAME"
|
||||||
|
echo " - Disk Size: 50 GB"
|
||||||
|
echo " - CPU Cores: 2"
|
||||||
|
echo " - RAM: 4096 MB"
|
||||||
|
echo " - Install Docker Compose: Yes"
|
||||||
|
echo " - Install Portainer: Yes (optional)"
|
||||||
|
echo ""
|
||||||
|
read -p "Press Enter to continue with container creation..."
|
||||||
|
|
||||||
|
ssh root@$PROXMOX_IP << 'EOF'
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "✅ Docker LXC container created"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Wait for container to be ready
|
||||||
|
echo "⏳ Waiting for container to be ready..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Get container IP
|
||||||
|
CONTAINER_IP=$(ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- hostname -I | awk '{print \$1}'")
|
||||||
|
echo "✅ Container IP: $CONTAINER_IP"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 2: Create Oracle XE deployment script
|
||||||
|
echo "📝 Step 2: Creating Oracle XE deployment script..."
|
||||||
|
|
||||||
|
cat > /tmp/deploy-oracle-xe.sh << 'DEPLOY_SCRIPT'
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Oracle Configuration
|
||||||
|
ORACLE_PASSWORD="OraclePass123"
|
||||||
|
ORACLE_PORT="1521"
|
||||||
|
ORACLE_EM_PORT="5500"
|
||||||
|
CONTAINER_NAME="oracle-xe"
|
||||||
|
|
||||||
|
echo "🚀 Starting Oracle XE 21c Deployment..."
|
||||||
|
|
||||||
|
# Create directories for persistence
|
||||||
|
echo "📁 Creating directories for persistence..."
|
||||||
|
mkdir -p /opt/oracle/oradata
|
||||||
|
mkdir -p /opt/oracle/scripts/setup
|
||||||
|
mkdir -p /opt/oracle/scripts/startup
|
||||||
|
chmod -R 777 /opt/oracle
|
||||||
|
echo "✅ Directories created"
|
||||||
|
|
||||||
|
# Download Oracle XE image
|
||||||
|
echo "📥 Downloading Oracle XE 21c image (this may take several minutes)..."
|
||||||
|
docker pull container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
echo "✅ Image downloaded"
|
||||||
|
|
||||||
|
# Run Oracle XE container
|
||||||
|
echo "🚀 Starting Oracle XE container..."
|
||||||
|
docker run -d \
|
||||||
|
--name $CONTAINER_NAME \
|
||||||
|
-p $ORACLE_PORT:1521 \
|
||||||
|
-p $ORACLE_EM_PORT:5500 \
|
||||||
|
-e ORACLE_PWD=$ORACLE_PASSWORD \
|
||||||
|
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||||
|
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||||
|
-v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \
|
||||||
|
-v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--shm-size=1g \
|
||||||
|
container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
|
||||||
|
echo "✅ Container started"
|
||||||
|
|
||||||
|
# Wait for database to be ready
|
||||||
|
echo "⏳ Waiting for database initialization (5-10 minutes)..."
|
||||||
|
until docker logs $CONTAINER_NAME 2>&1 | grep -q "DATABASE IS READY TO USE!"; do
|
||||||
|
sleep 10
|
||||||
|
echo -n "."
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
echo "✅ Database is ready!"
|
||||||
|
|
||||||
|
# Extra wait for stabilization
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
echo "✅ Oracle XE deployment completed!"
|
||||||
|
DEPLOY_SCRIPT
|
||||||
|
|
||||||
|
# Copy and execute deployment script
|
||||||
|
echo "🚀 Deploying Oracle XE..."
|
||||||
|
scp /tmp/deploy-oracle-xe.sh root@$PROXMOX_IP:/tmp/
|
||||||
|
ssh root@$PROXMOX_IP "sed -i 's/\r$//' /tmp/deploy-oracle-xe.sh"
|
||||||
|
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/deploy-oracle-xe.sh /root/deploy-oracle-xe.sh"
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- chmod +x /root/deploy-oracle-xe.sh"
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash /root/deploy-oracle-xe.sh"
|
||||||
|
|
||||||
|
echo "✅ Oracle XE deployed successfully"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 3: Configure PDBs (Remove XEPDB1, Create ROA and ROA2)
|
||||||
|
echo "🔧 Step 3: Configuring Pluggable Databases..."
|
||||||
|
|
||||||
|
cat > /tmp/configure_pdbs.sql << EOF
|
||||||
|
-- Close and drop default XEPDB1
|
||||||
|
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
|
||||||
|
DROP PLUGGABLE DATABASE XEPDB1 INCLUDING DATAFILES;
|
||||||
|
|
||||||
|
-- Create ROA PDB
|
||||||
|
CREATE PLUGGABLE DATABASE ROA
|
||||||
|
ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD
|
||||||
|
STORAGE (MAXSIZE 5G)
|
||||||
|
DEFAULT TABLESPACE USERS
|
||||||
|
DATAFILE '/opt/oracle/oradata/XE/ROA/users01.dbf' SIZE 250M AUTOEXTEND ON
|
||||||
|
FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA/');
|
||||||
|
|
||||||
|
-- Create ROA2 PDB
|
||||||
|
CREATE PLUGGABLE DATABASE ROA2
|
||||||
|
ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD
|
||||||
|
STORAGE (MAXSIZE 5G)
|
||||||
|
DEFAULT TABLESPACE USERS
|
||||||
|
DATAFILE '/opt/oracle/oradata/XE/ROA2/users01.dbf' SIZE 250M AUTOEXTEND ON
|
||||||
|
FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA2/');
|
||||||
|
|
||||||
|
-- Open the new PDBs
|
||||||
|
ALTER PLUGGABLE DATABASE ROA OPEN;
|
||||||
|
ALTER PLUGGABLE DATABASE ROA2 OPEN;
|
||||||
|
|
||||||
|
-- Save state for auto-open on restart
|
||||||
|
ALTER PLUGGABLE DATABASE ROA SAVE STATE;
|
||||||
|
ALTER PLUGGABLE DATABASE ROA2 SAVE STATE;
|
||||||
|
|
||||||
|
-- Show results
|
||||||
|
SELECT con_id, name, open_mode FROM v\$pdbs ORDER BY con_id;
|
||||||
|
exit;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Execute PDB configuration
|
||||||
|
scp /tmp/configure_pdbs.sql root@$PROXMOX_IP:/tmp/
|
||||||
|
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/configure_pdbs.sql /tmp/configure_pdbs.sql"
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/configure_pdbs.sql"
|
||||||
|
|
||||||
|
echo "✅ PDBs configured (XEPDB1 removed, ROA and ROA2 created)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 4: Create users in PDBs
|
||||||
|
echo "👤 Step 4: Creating users in PDBs..."
|
||||||
|
|
||||||
|
cat > /tmp/create_users.sql << EOF
|
||||||
|
-- Create user in ROA PDB
|
||||||
|
ALTER SESSION SET CONTAINER = ROA;
|
||||||
|
CREATE USER app_roa IDENTIFIED BY $ROA_USER_PASSWORD;
|
||||||
|
GRANT CONNECT, RESOURCE TO app_roa;
|
||||||
|
GRANT CREATE SESSION TO app_roa;
|
||||||
|
GRANT CREATE TABLE TO app_roa;
|
||||||
|
GRANT CREATE VIEW TO app_roa;
|
||||||
|
GRANT CREATE PROCEDURE TO app_roa;
|
||||||
|
GRANT CREATE SEQUENCE TO app_roa;
|
||||||
|
GRANT UNLIMITED TABLESPACE TO app_roa;
|
||||||
|
|
||||||
|
-- Create user in ROA2 PDB
|
||||||
|
ALTER SESSION SET CONTAINER = ROA2;
|
||||||
|
CREATE USER app_roa2 IDENTIFIED BY $ROA2_USER_PASSWORD;
|
||||||
|
GRANT CONNECT, RESOURCE TO app_roa2;
|
||||||
|
GRANT CREATE SESSION TO app_roa2;
|
||||||
|
GRANT CREATE TABLE TO app_roa2;
|
||||||
|
GRANT CREATE VIEW TO app_roa2;
|
||||||
|
GRANT CREATE PROCEDURE TO app_roa2;
|
||||||
|
GRANT CREATE SEQUENCE TO app_roa2;
|
||||||
|
GRANT UNLIMITED TABLESPACE TO app_roa2;
|
||||||
|
|
||||||
|
-- Verify users
|
||||||
|
ALTER SESSION SET CONTAINER = CDB\$ROOT;
|
||||||
|
SELECT name, network_name FROM v\$active_services WHERE con_id > 1 ORDER BY con_id;
|
||||||
|
exit;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Execute user creation
|
||||||
|
scp /tmp/create_users.sql root@$PROXMOX_IP:/tmp/
|
||||||
|
ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/create_users.sql /tmp/create_users.sql"
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/create_users.sql"
|
||||||
|
|
||||||
|
echo "✅ Users created in PDBs"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 5: Create helper scripts
|
||||||
|
echo "📝 Step 5: Creating helper scripts..."
|
||||||
|
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-status << \"HELPER_EOF\"
|
||||||
|
#!/bin/bash
|
||||||
|
echo \"=== Oracle XE Status ===\"
|
||||||
|
docker ps --filter \"name=oracle-xe\" --format \"table {{.Names}}\t{{.Status}}\t{{.Ports}}\"
|
||||||
|
echo \"\"
|
||||||
|
echo \"=== Database Status ===\"
|
||||||
|
docker exec oracle-xe lsnrctl status 2>/dev/null | grep -E \"Instance|Service|Listening\" || echo \"Listener not ready\"
|
||||||
|
HELPER_EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-status'"
|
||||||
|
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-sqlplus << \"HELPER_EOF\"
|
||||||
|
#!/bin/bash
|
||||||
|
docker exec -it oracle-xe sqlplus sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba
|
||||||
|
HELPER_EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-sqlplus'"
|
||||||
|
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-logs << \"HELPER_EOF\"
|
||||||
|
#!/bin/bash
|
||||||
|
docker logs -f oracle-xe
|
||||||
|
HELPER_EOF
|
||||||
|
chmod +x /usr/local/bin/oracle-logs'"
|
||||||
|
|
||||||
|
echo "✅ Helper scripts created"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 6: Test connections
|
||||||
|
echo "🔍 Step 6: Testing connections..."
|
||||||
|
|
||||||
|
echo "Testing ROA connection..."
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa/$ROA_USER_PASSWORD@localhost:1521/ROA'" > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ ROA connection successful"
|
||||||
|
else
|
||||||
|
echo "❌ ROA connection failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Testing ROA2 connection..."
|
||||||
|
ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa2/$ROA2_USER_PASSWORD@localhost:1521/ROA2'" > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ ROA2 connection successful"
|
||||||
|
else
|
||||||
|
echo "❌ ROA2 connection failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Final information
|
||||||
|
echo "=========================================="
|
||||||
|
echo "✅ ORACLE XE SETUP COMPLETE!"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
echo "Container Information:"
|
||||||
|
echo " - Container ID: $CONTAINER_ID"
|
||||||
|
echo " - Container Name: $CONTAINER_NAME"
|
||||||
|
echo " - Container IP: $CONTAINER_IP"
|
||||||
|
echo " - Portainer UI: https://$CONTAINER_IP:9443"
|
||||||
|
echo ""
|
||||||
|
echo "Oracle XE Information:"
|
||||||
|
echo " - Oracle Port: 1521"
|
||||||
|
echo " - Enterprise Manager: https://$CONTAINER_IP:5500/em"
|
||||||
|
echo " - SYS Password: $ORACLE_PASSWORD"
|
||||||
|
echo ""
|
||||||
|
echo "Pluggable Databases (PDBs):"
|
||||||
|
echo " 1. ROA"
|
||||||
|
echo " - User: app_roa"
|
||||||
|
echo " - Password: $ROA_USER_PASSWORD"
|
||||||
|
echo " - Connection: sqlplus app_roa/$ROA_USER_PASSWORD@$CONTAINER_IP:1521/ROA"
|
||||||
|
echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA"
|
||||||
|
echo ""
|
||||||
|
echo " 2. ROA2"
|
||||||
|
echo " - User: app_roa2"
|
||||||
|
echo " - Password: $ROA2_USER_PASSWORD"
|
||||||
|
echo " - Connection: sqlplus app_roa2/$ROA2_USER_PASSWORD@$CONTAINER_IP:1521/ROA2"
|
||||||
|
echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA2"
|
||||||
|
echo ""
|
||||||
|
echo " PDB Admin (both): pdbadmin / $PDB_ADMIN_PASSWORD"
|
||||||
|
echo ""
|
||||||
|
echo "Helper Commands (run inside container):"
|
||||||
|
echo " - oracle-status : Check Oracle status"
|
||||||
|
echo " - oracle-sqlplus : Connect as SYS"
|
||||||
|
echo " - oracle-logs : View Oracle logs"
|
||||||
|
echo ""
|
||||||
|
echo "To enter the container:"
|
||||||
|
echo " ssh root@$PROXMOX_IP"
|
||||||
|
echo " pct enter $CONTAINER_ID"
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# Cleanup temporary files
|
||||||
|
rm -f /tmp/deploy-oracle-xe.sh
|
||||||
|
rm -f /tmp/configure_pdbs.sql
|
||||||
|
rm -f /tmp/create_users.sql
|
||||||
|
|
||||||
|
echo "🎉 Setup completed successfully!"
|
||||||
401
system_instructions/oracle/oracle-xe-lxc-install-guide.md
Normal file
401
system_instructions/oracle/oracle-xe-lxc-install-guide.md
Normal file
@@ -0,0 +1,401 @@
|
|||||||
|
# Ghid Instalare Oracle XE 21 în LXC pe Proxmox
|
||||||
|
|
||||||
|
## Rezumat Opțiuni
|
||||||
|
|
||||||
|
Din cercetare rezultă că **nu există template-uri LXC cu Oracle XE pre-instalat**. Cele mai viabile opțiuni sunt:
|
||||||
|
|
||||||
|
1. **Docker-in-LXC** (Recomandat) - Cea mai simplă și automatizată
|
||||||
|
2. **Instalare manuală în Oracle Linux LXC** - Mai directă dar complexă
|
||||||
|
3. **Script-uri de automatizare** - Soluții comunitate
|
||||||
|
|
||||||
|
## Opțiunea 1: Docker-in-LXC (RECOMANDAT) ✅
|
||||||
|
|
||||||
|
### Avantaje
|
||||||
|
- Folosește imaginea oficială Oracle cu automatizare completă
|
||||||
|
- Configurare minimă manuală
|
||||||
|
- Suport oficial Oracle pentru containerizare
|
||||||
|
- Ușor de actualizat și întreținut
|
||||||
|
|
||||||
|
### Dezavantaje
|
||||||
|
- Overhead suplimentar Docker
|
||||||
|
- Container în container (LXC → Docker)
|
||||||
|
|
||||||
|
### Pași de Instalare
|
||||||
|
|
||||||
|
#### 1. Creare Container LXC Privilegiat
|
||||||
|
|
||||||
|
SSH pe Proxmox:
|
||||||
|
```bash
|
||||||
|
ssh root@10.0.20.201
|
||||||
|
|
||||||
|
# Download template Ubuntu 22.04 dacă nu există
|
||||||
|
pveam update
|
||||||
|
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz
|
||||||
|
|
||||||
|
# Creare container privilegiat
|
||||||
|
pct create 300 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.gz \
|
||||||
|
--hostname oracle-xe \
|
||||||
|
--cores 2 \
|
||||||
|
--memory 4096 \
|
||||||
|
--swap 2048 \
|
||||||
|
--rootfs local-zfs:20 \
|
||||||
|
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
|
||||||
|
--unprivileged 0 \
|
||||||
|
--features nesting=1,keyctl=1 \
|
||||||
|
--ostype ubuntu
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Configurare Container pentru Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start container
|
||||||
|
pct start 300
|
||||||
|
|
||||||
|
# Intrare în container
|
||||||
|
pct enter 300
|
||||||
|
|
||||||
|
# Update sistem
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
|
||||||
|
# Instalare Docker
|
||||||
|
apt install -y ca-certificates curl gnupg lsb-release
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
apt update
|
||||||
|
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||||
|
|
||||||
|
# Verificare Docker
|
||||||
|
docker --version
|
||||||
|
systemctl enable docker
|
||||||
|
systemctl start docker
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Deploy Oracle XE 21 cu Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Crearea directoarelor pentru persistență
|
||||||
|
mkdir -p /opt/oracle/oradata
|
||||||
|
mkdir -p /opt/oracle/scripts/setup
|
||||||
|
mkdir -p /opt/oracle/scripts/startup
|
||||||
|
|
||||||
|
# Pull imagine oficială Oracle XE
|
||||||
|
docker pull container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
|
||||||
|
# Rulare container Oracle XE
|
||||||
|
docker run -d \
|
||||||
|
--name oracle-xe \
|
||||||
|
-p 1521:1521 \
|
||||||
|
-p 5500:5500 \
|
||||||
|
-e ORACLE_PWD=OraclePass123 \
|
||||||
|
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||||
|
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||||
|
-v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \
|
||||||
|
-v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \
|
||||||
|
container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
|
||||||
|
# Verificare status
|
||||||
|
docker ps
|
||||||
|
docker logs -f oracle-xe
|
||||||
|
|
||||||
|
# Așteptare până DB este ready (durează ~5-10 minute prima dată)
|
||||||
|
# Căutați în logs: "DATABASE IS READY TO USE!"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. Configurare Acces și Testare
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Obținere IP container LXC
|
||||||
|
ip addr show eth0
|
||||||
|
|
||||||
|
# Test conexiune din container
|
||||||
|
docker exec -it oracle-xe sqlplus sys/OraclePass123@localhost:1521/XE as sysdba
|
||||||
|
|
||||||
|
# În SQL*Plus
|
||||||
|
SQL> SELECT banner FROM v$version;
|
||||||
|
SQL> exit
|
||||||
|
|
||||||
|
# Creare user pentru aplicații
|
||||||
|
docker exec -it oracle-xe sqlplus sys/OraclePass123@localhost:1521/XE as sysdba <<EOF
|
||||||
|
CREATE USER appuser IDENTIFIED BY AppPass123;
|
||||||
|
GRANT CONNECT, RESOURCE TO appuser;
|
||||||
|
GRANT CREATE SESSION TO appuser;
|
||||||
|
GRANT UNLIMITED TABLESPACE TO appuser;
|
||||||
|
exit;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Auto-start la boot
|
||||||
|
docker update --restart=unless-stopped oracle-xe
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5. Acces din Exterior
|
||||||
|
|
||||||
|
Din WSL sau alt sistem:
|
||||||
|
```bash
|
||||||
|
# Conexiune SQL*Plus
|
||||||
|
sqlplus appuser/AppPass123@10.0.20.XXX:1521/XE
|
||||||
|
|
||||||
|
# Conexiune cu tool-uri GUI
|
||||||
|
# JDBC URL: jdbc:oracle:thin:@10.0.20.XXX:1521:XE
|
||||||
|
# Enterprise Manager: http://10.0.20.XXX:5500/em
|
||||||
|
```
|
||||||
|
|
||||||
|
## Opțiunea 2: Instalare Manuală în Oracle Linux LXC
|
||||||
|
|
||||||
|
### Pași de Instalare
|
||||||
|
|
||||||
|
#### 1. Download și Creare Template Oracle Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Pe Proxmox
|
||||||
|
cd /var/lib/vz/template/cache/
|
||||||
|
|
||||||
|
# Download Oracle Linux 8 rootfs
|
||||||
|
wget https://images.linuxcontainers.org/images/oraclelinux/8/amd64/default/20240101_00:00/rootfs.tar.xz -O oraclelinux-8_amd64.tar.xz
|
||||||
|
|
||||||
|
# Creare container
|
||||||
|
pct create 301 local:vztmpl/oraclelinux-8_amd64.tar.xz \
|
||||||
|
--hostname oracle-xe-native \
|
||||||
|
--cores 2 \
|
||||||
|
--memory 4096 \
|
||||||
|
--swap 2048 \
|
||||||
|
--rootfs local-zfs:20 \
|
||||||
|
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
|
||||||
|
--unprivileged 0 \
|
||||||
|
--features nesting=1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Pregătire Sistem pentru Oracle XE
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pct start 301
|
||||||
|
pct enter 301
|
||||||
|
|
||||||
|
# Configurare hostname și hosts
|
||||||
|
echo "oracle-xe-native" > /etc/hostname
|
||||||
|
echo "127.0.0.1 oracle-xe-native" >> /etc/hosts
|
||||||
|
|
||||||
|
# Disable IPv6 (Oracle XE compatibility)
|
||||||
|
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
|
||||||
|
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
|
||||||
|
sysctl -p
|
||||||
|
|
||||||
|
# Install pachete necesare
|
||||||
|
yum install -y oracle-database-preinstall-21c
|
||||||
|
yum install -y wget unzip
|
||||||
|
|
||||||
|
# Configurare kernel parameters pentru Oracle
|
||||||
|
cat >> /etc/sysctl.conf <<EOF
|
||||||
|
fs.aio-max-nr = 1048576
|
||||||
|
fs.file-max = 6815744
|
||||||
|
kernel.shmall = 2097152
|
||||||
|
kernel.shmmax = 4294967295
|
||||||
|
kernel.shmmni = 4096
|
||||||
|
kernel.sem = 250 32000 100 128
|
||||||
|
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
|
||||||
|
EOF
|
||||||
|
sysctl -p
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Download și Instalare Oracle XE 21c
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download Oracle XE (necesită cont Oracle)
|
||||||
|
# Manual: Download de pe https://www.oracle.com/database/technologies/xe-downloads.html
|
||||||
|
# Transfer fișierul oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm în container
|
||||||
|
|
||||||
|
# Sau folosește wget cu link direct (dacă ai)
|
||||||
|
cd /tmp
|
||||||
|
# wget [ORACLE_XE_DOWNLOAD_LINK]
|
||||||
|
|
||||||
|
# Instalare RPM
|
||||||
|
yum localinstall -y oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
|
||||||
|
|
||||||
|
# Configurare automată
|
||||||
|
/etc/init.d/oracle-xe-21c configure <<EOF
|
||||||
|
OraclePass123
|
||||||
|
OraclePass123
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Set environment
|
||||||
|
echo 'export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE' >> /etc/profile
|
||||||
|
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/profile
|
||||||
|
echo 'export ORACLE_SID=XE' >> /etc/profile
|
||||||
|
source /etc/profile
|
||||||
|
|
||||||
|
# Enable auto-start
|
||||||
|
systemctl enable oracle-xe-21c
|
||||||
|
systemctl start oracle-xe-21c
|
||||||
|
```
|
||||||
|
|
||||||
|
## Opțiunea 3: Script-uri de Automatizare
|
||||||
|
|
||||||
|
### Folosire Repository-uri GitHub
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Exemplu cu gvenzl/oci-oracle-xe
|
||||||
|
git clone https://github.com/gvenzl/oci-oracle-xe
|
||||||
|
cd oci-oracle-xe
|
||||||
|
|
||||||
|
# Build container image
|
||||||
|
./buildContainerImage.sh -v 21.3.0 -x
|
||||||
|
|
||||||
|
# Sau folosire directă cu Docker
|
||||||
|
docker run -d \
|
||||||
|
-p 1521:1521 \
|
||||||
|
-e ORACLE_PASSWORD=OraclePass123 \
|
||||||
|
gvenzl/oracle-xe:21-slim
|
||||||
|
```
|
||||||
|
|
||||||
|
## Cerințe Hardware și Configurare
|
||||||
|
|
||||||
|
### Resurse Minime Container
|
||||||
|
- **CPU:** 2 cores
|
||||||
|
- **RAM:** 4GB (minim 2GB)
|
||||||
|
- **Disk:** 20GB (9GB minim pentru Oracle)
|
||||||
|
- **Swap:** 2GB
|
||||||
|
|
||||||
|
### Porturi Necesare
|
||||||
|
- **1521:** Oracle Listener
|
||||||
|
- **5500:** Enterprise Manager Express
|
||||||
|
- **8080:** APEX (opțional)
|
||||||
|
|
||||||
|
### Configurări LXC Specifice
|
||||||
|
```bash
|
||||||
|
# În /etc/pve/lxc/[CTID].conf pe Proxmox
|
||||||
|
lxc.apparmor.profile: unconfined
|
||||||
|
lxc.cgroup2.devices.allow: a
|
||||||
|
lxc.cap.drop:
|
||||||
|
lxc.mount.auto: proc:rw sys:rw
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Probleme Comune
|
||||||
|
|
||||||
|
#### 1. Insufficient Memory
|
||||||
|
```bash
|
||||||
|
# Verificare memorie
|
||||||
|
free -h
|
||||||
|
# Ajustare din Proxmox
|
||||||
|
pct set [CTID] --memory 6144
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Docker în LXC nu pornește
|
||||||
|
```bash
|
||||||
|
# Verificare privilegii container
|
||||||
|
# Container trebuie să fie privilegiat (unprivileged=0)
|
||||||
|
# Features: nesting=1, keyctl=1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. Oracle XE nu pornește
|
||||||
|
```bash
|
||||||
|
# Check logs
|
||||||
|
docker logs oracle-xe
|
||||||
|
# Sau pentru instalare nativă
|
||||||
|
tail -f /opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. Conexiune refuzată
|
||||||
|
```bash
|
||||||
|
# Verificare listener
|
||||||
|
docker exec oracle-xe lsnrctl status
|
||||||
|
# Verificare firewall
|
||||||
|
iptables -L
|
||||||
|
```
|
||||||
|
|
||||||
|
## Script Complet Automatizare Docker-in-LXC
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
# oracle-xe-lxc-deploy.sh
|
||||||
|
|
||||||
|
CTID=300
|
||||||
|
HOSTNAME="oracle-xe"
|
||||||
|
MEMORY=4096
|
||||||
|
DISK=20
|
||||||
|
ORACLE_PWD="OraclePass123"
|
||||||
|
|
||||||
|
echo "Creating Oracle XE LXC Container..."
|
||||||
|
|
||||||
|
# Create container
|
||||||
|
pct create $CTID local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.gz \
|
||||||
|
--hostname $HOSTNAME \
|
||||||
|
--cores 2 \
|
||||||
|
--memory $MEMORY \
|
||||||
|
--swap 2048 \
|
||||||
|
--rootfs local-zfs:$DISK \
|
||||||
|
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
|
||||||
|
--unprivileged 0 \
|
||||||
|
--features nesting=1,keyctl=1 \
|
||||||
|
--ostype ubuntu
|
||||||
|
|
||||||
|
# Start and configure
|
||||||
|
pct start $CTID
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Install Docker and Oracle XE
|
||||||
|
pct exec $CTID -- bash -c "
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
apt install -y ca-certificates curl gnupg lsb-release
|
||||||
|
mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
echo 'deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable' | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
apt update
|
||||||
|
apt install -y docker-ce docker-ce-cli containerd.io
|
||||||
|
systemctl enable docker
|
||||||
|
systemctl start docker
|
||||||
|
mkdir -p /opt/oracle/oradata
|
||||||
|
docker run -d \
|
||||||
|
--name oracle-xe \
|
||||||
|
-p 1521:1521 \
|
||||||
|
-p 5500:5500 \
|
||||||
|
-e ORACLE_PWD=$ORACLE_PWD \
|
||||||
|
-e ORACLE_CHARACTERSET=AL32UTF8 \
|
||||||
|
-v /opt/oracle/oradata:/opt/oracle/oradata \
|
||||||
|
--restart unless-stopped \
|
||||||
|
container-registry.oracle.com/database/express:21.3.0-xe
|
||||||
|
"
|
||||||
|
|
||||||
|
echo "Oracle XE deployment initiated. Check logs with:"
|
||||||
|
echo "pct exec $CTID -- docker logs -f oracle-xe"
|
||||||
|
echo "Database will be ready in ~5-10 minutes"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conexiune și Utilizare
|
||||||
|
|
||||||
|
### String-uri de Conexiune
|
||||||
|
```
|
||||||
|
# SQL*Plus
|
||||||
|
sqlplus sys/OraclePass123@localhost:1521/XE as sysdba
|
||||||
|
|
||||||
|
# JDBC
|
||||||
|
jdbc:oracle:thin:@10.0.20.XXX:1521:XE
|
||||||
|
|
||||||
|
# TNS
|
||||||
|
XE =
|
||||||
|
(DESCRIPTION =
|
||||||
|
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.XXX)(PORT = 1521))
|
||||||
|
(CONNECT_DATA =
|
||||||
|
(SERVER = DEDICATED)
|
||||||
|
(SERVICE_NAME = XE)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tool-uri Recomandate
|
||||||
|
- **SQL Developer** - Oracle oficial
|
||||||
|
- **DBeaver** - Universal database tool
|
||||||
|
- **Enterprise Manager Express** - http://10.0.20.XXX:5500/em
|
||||||
|
|
||||||
|
## Note Finale
|
||||||
|
|
||||||
|
1. **Varianta Docker-in-LXC este cea mai simplă** și recomandată pentru majoritatea cazurilor
|
||||||
|
2. **Backup-uri regulate** folosind Proxmox vzdump
|
||||||
|
3. **Monitorizare resurse** - Oracle XE poate consuma multă memorie
|
||||||
|
4. **Licențiere** - Oracle XE este gratuită dar cu limitări (12GB data, 2GB RAM, 2 CPU threads)
|
||||||
|
5. **Securitate** - Schimbați parolele default, configurați firewall
|
||||||
Reference in New Issue
Block a user