分享一个实用的Oracle数据库参数配置生成工具

发布于:2025-06-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

在这里插入图片描述

关键代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Oracle数据库参数配置生成工具</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root {
            --primary: #2c3e50;
            --secondary: #3498db;
            --accent: #e74c3c;
            --light: #ecf0f1;
            --dark: #2c3e50;
            --success: #27ae60;
            --warning: #f39c12;
        }
        
        body {
            background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            color: #34495e;
            min-height: 100vh;
        }
        
        .header {
            background: linear-gradient(to right, var(--primary), var(--secondary));
            color: white;
            padding: 2rem 0;
            margin-bottom: 2rem;
            box-shadow: 0 4px 12px rgba(0,0,0,0.1);
            border-radius: 0 0 20px 20px;
        }
        
        .card {
            border-radius: 12px;
            box-shadow: 0 6px 15px rgba(0,0,0,0.08);
            border: none;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            margin-bottom: 1.5rem;
            overflow: hidden;
        }
        
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 12px 20px rgba(0,0,0,0.15);
        }
        
        .card-header {
            background: linear-gradient(to right, var(--secondary), #4aa1db);
            color: white;
            font-weight: 600;
            padding: 1rem 1.5rem;
            border-radius: 12px 12px 0 0 !important;
        }
        
        .param-row {
            border-bottom: 1px solid #eaeaea;
            padding: 1rem 0;
            transition: background-color 0.2s;
        }
        
        .param-row:hover {
            background-color: #f8f9fa;
        }
        
        .param-name {
            font-weight: 600;
            color: var(--primary);
        }
        
        .param-desc {
            color: #7f8c8d;
            font-size: 0.9rem;
        }
        
        .btn-primary {
            background: linear-gradient(to right, var(--secondary), #2980b9);
            border: none;
            padding: 0.6rem 1.5rem;
            font-weight: 600;
            border-radius: 8px;
            transition: all 0.3s ease;
        }
        
        .btn-primary:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(52, 152, 219, 0.4);
        }
        
        .btn-download {
            background: linear-gradient(to right, var(--success), #219653);
            border: none;
            padding: 0.8rem 1.5rem;
            font-weight: 600;
            border-radius: 10px;
            transition: all 0.3s ease;
        }
        
        .btn-copy {
            background: linear-gradient(to right, #9b59b6, #8e44ad);
            border: none;
            padding: 0.8rem 1.5rem;
            font-weight: 600;
            border-radius: 10px;
            transition: all 0.3s ease;
        }
        
        .btn-download:hover, .btn-copy:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 12px rgba(0,0,0,0.2);
        }
        
        .config-output {
            background-color: #2c3e50;
            color: #ecf0f1;
            font-family: 'Courier New', monospace;
            padding: 1.5rem;
            border-radius: 8px;
            max-height: 400px;
            overflow-y: auto;
            white-space: pre-wrap;
            font-size: 0.9rem;
            line-height: 1.6;
        }
        
        .highlight {
            background-color: rgba(231, 76, 60, 0.15);
            padding: 0.2rem 0.4rem;
            border-radius: 4px;
            font-weight: 600;
        }
        
        .version-badge {
            font-size: 0.8rem;
            padding: 0.3rem 0.7rem;
            border-radius: 20px;
            margin-right: 0.5rem;
        }
        
        .section-title {
            position: relative;
            padding-bottom: 0.5rem;
            margin-bottom: 1.5rem;
            border-bottom: 2px solid var(--secondary);
        }
        
        .section-title:after {
            content: '';
            position: absolute;
            bottom: -2px;
            left: 0;
            width: 80px;
            height: 3px;
            background: var(--accent);
        }
        
        .recommended-value {
            background-color: rgba(39, 174, 96, 0.1);
            color: var(--success);
            padding: 0.2rem 0.5rem;
            border-radius: 4px;
            font-size: 0.85rem;
        }
        
        .info-box {
            background: linear-gradient(135deg, #e3f2fd, #bbdefb);
            border-left: 4px solid var(--secondary);
            padding: 1rem;
            border-radius: 0 8px 8px 0;
            margin-bottom: 1.5rem;
        }
        
        .custom-param-row {
            background-color: #fffde7;
            border-left: 3px solid var(--warning);
            margin-bottom: 0.5rem;
            border-radius: 4px;
            padding: 0.8rem;
        }
        
        .custom-param-row .form-control {
            background-color: #fffef9;
        }
        
        .custom-param-row .btn-danger {
            background: linear-gradient(to right, #e74c3c, #c0392b);
        }
        
        .btn-add-param {
            background: linear-gradient(to right, var(--warning), #e67e22);
            border: none;
            font-weight: 600;
            margin-top: 1rem;
        }
        
        .action-buttons {
            display: flex;
            gap: 10px;
            margin-top: 1.5rem;
        }
        
        .action-buttons .btn {
            flex: 1;
        }
        
        .toast-container {
            position: fixed;
            top: 20px;
            right: 20px;
            z-index: 1050;
            min-width: 300px;
        }
        
        .toast {
            background-color: rgba(255, 255, 255, 0.95);
            border-radius: 10px;
            box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
            overflow: hidden;
        }
        
        .toast-header {
            background: linear-gradient(to right, var(--primary), var(--dark));
            color: white;
            font-weight: 600;
        }
        
        @media (max-width: 768px) {
            .card {
                margin-bottom: 1rem;
            }
            
            .header {
                padding: 1.5rem 0;
            }
            
            h1 {
                font-size: 1.8rem;
            }
            
            .action-buttons {
                flex-direction: column;
            }
            
            .toast-container {
                top: 10px;
                right: 10px;
                left: 10px;
            }
        }
    </style>
</head>
<body>
    <!-- 顶部标题 -->
    <header class="header text-center">
        <div class="container">
            <h1 class="display-4 fw-bold mb-3"><i class="fas fa-database me-2"></i>Oracle数据库参数配置生成工具</h1>
            <p class="lead">根据最佳实践生成Oracle 11g/12c/19c/21c配置文件</p>
        </div>
    </header>

    <div class="container mb-5">
        <div class="row">
            <!-- 左侧配置区域 -->
            <div class="col-lg-8">
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-cog me-2"></i>基本配置
                    </div>
                    <div class="card-body">
                        <div class="row mb-4">
                            <div class="col-md-6 mb-3">
                                <label class="form-label fw-bold">数据库版本</label>
                                <select id="dbVersion" class="form-select">
                                    <option value="11g">Oracle 11g</option>
                                    <option value="12c" selected>Oracle 12c</option>
                                    <option value="19c">Oracle 19c</option>
                                    <option value="21c">Oracle 21c</option>
                                </select>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label class="form-label fw-bold">部署类型</label>
                                <select id="deploymentType" class="form-select">
                                    <option value="single">单实例</option>
                                    <option value="rac">RAC集群</option>
                                </select>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label class="form-label fw-bold">SGA大小 (GB)</label>
                                <input type="number" id="sgaSize" class="form-control" value="16" min="1" max="512">
                            </div>
                            <div class="col-md-6 mb-3">
                                <label class="form-label fw-bold">PGA大小 (GB)</label>
                                <input type="number" id="pgaSize" class="form-control" value="4" min="1" max="256">
                            </div>
                        </div>
                        
                        <div class="info-box">
                            <h5><i class="fas fa-lightbulb me-2 text-warning"></i>配置说明</h5>
                            <p class="mb-0">根据Oracle最佳实践,建议关闭审计功能,禁用AMM自动内存管理,使用手工内存管理。对于RAC环境,建议关闭DRM特性以避免性能问题。</p>
                        </div>
                    </div>
                </div>
                
                <!-- 内存参数 -->
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-memory me-2"></i>内存参数
                    </div>
                    <div class="card-body">
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">memory_target</div>
                                <div class="param-desc">自动内存管理 (AMM)</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 0 (禁用)</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="0">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">sga_max_size</div>
                                <div class="param-desc">SGA最大大小</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 根据SGA设置</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="16G">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">sga_target</div>
                                <div class="param-desc">SGA目标大小</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 根据SGA设置</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="16G">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">pga_aggregate_target</div>
                                <div class="param-desc">PGA聚合目标</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 根据PGA设置</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="4G">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_shared_pool_reserved_pct</div>
                                <div class="param-desc">共享池保留百分比</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 20</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="20">
                            </div>
                        </div>
                    </div>
                </div>
                
                <!-- 优化器参数 -->
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-bolt me-2"></i>优化器参数
                    </div>
                    <div class="card-body">
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_optimizer_adaptive_cursor_sharing</div>
                                <div class="param-desc">自适应游标共享</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_optimizer_use_feedback</div>
                                <div class="param-desc">基数反馈特性</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_optimizer_extended_cursor_sharing</div>
                                <div class="param-desc">扩展游标共享</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: NONE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="NONE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_b_tree_bitmap_plans</div>
                                <div class="param-desc">B树位图计划</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_bloom_filter_enabled</div>
                                <div class="param-desc">布隆过滤器</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                    </div>
                </div>
                
                <!-- RAC参数 -->
                <div class="card mb-4" id="racParams">
                    <div class="card-header">
                        <i class="fas fa-server me-2"></i>RAC集群参数
                    </div>
                    <div class="card-body">
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">parallel_force_local</div>
                                <div class="param-desc">强制本地并行执行</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: TRUE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="TRUE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_gc_policy_time</div>
                                <div class="param-desc">DRM策略时间</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 0 (禁用DRM)</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="0">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_gc_undo_affinity</div>
                                <div class="param-desc">UNDO亲和性</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_lm_sync_timeout</div>
                                <div class="param-desc">锁管理器同步超时</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 1200</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="1200">
                            </div>
                        </div>
                    </div>
                </div>
                
                <!-- 其他参数 -->
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-sliders-h me-2"></i>其他重要参数
                    </div>
                    <div class="card-body">
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">audit_trail</div>
                                <div class="param-desc">审计跟踪</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: NONE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="NONE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">deferred_segment_creation</div>
                                <div class="param-desc">延迟段创建</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_use_adaptive_log_file_sync</div>
                                <div class="param-desc">自适应日志文件同步</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">_undo_autotune</div>
                                <div class="param-desc">UNDO自动优化</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: FALSE</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="FALSE">
                            </div>
                        </div>
                        
                        <div class="param-row row align-items-center">
                            <div class="col-md-4">
                                <div class="param-name">control_file_record_keep_time</div>
                                <div class="param-desc">控制文件记录保留时间</div>
                            </div>
                            <div class="col-md-4">
                                <div class="recommended-value">推荐值: 31</div>
                            </div>
                            <div class="col-md-4">
                                <input type="text" class="form-control param-value" value="31">
                            </div>
                        </div>
                    </div>
                </div>
                
                <!-- 自定义参数 -->
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-plus-circle me-2"></i>自定义参数
                    </div>
                    <div class="card-body">
                        <div id="customParamsContainer">
                            <div class="custom-param-row row align-items-center">
                                <div class="col-md-5">
                                    <input type="text" class="form-control custom-param-name" placeholder="参数名 (例如: _optimizer_features_enable)">
                                </div>
                                <div class="col-md-5">
                                    <input type="text" class="form-control custom-param-value" placeholder="参数值 (例如: 12.2.0.1)">
                                </div>
                                <div class="col-md-2">
                                    <button class="btn btn-danger w-100 remove-param-btn">
                                        <i class="fas fa-trash"></i>
                                    </button>
                                </div>
                            </div>
                        </div>
                        
                        <button id="addParamBtn" class="btn btn-add-param w-100">
                            <i class="fas fa-plus me-2"></i>添加自定义参数
                        </button>
                    </div>
                </div>
                
                <div class="d-grid">
                    <button id="generateBtn" class="btn btn-primary btn-lg">
                        <i class="fas fa-cogs me-2"></i>生成配置文件
                    </button>
                </div>
            </div>
            
            <!-- 右侧结果区域 -->
            <div class="col-lg-4">
                <div class="card mb-4">
                    <div class="card-header">
                        <i class="fas fa-file-code me-2"></i>生成的配置文件
                    </div>
                    <div class="card-body">
                        <div class="mb-3">
                            <div class="d-flex justify-content-between align-items-center mb-2">
                                <span class="fw-bold">配置预览:</span>
                                <span id="versionBadge" class="badge bg-primary version-badge">Oracle 12c</span>
                            </div>
                            <div class="config-output" id="configOutput">
                                # 请点击"生成配置文件"按钮创建配置
                            </div>
                        </div>
                        
                        <div class="action-buttons">
                            <button id="downloadBtn" class="btn btn-download">
                                <i class="fas fa-download me-2"></i>下载配置文件
                            </button>
                            <button id="copyBtn" class="btn btn-copy">
                                <i class="fas fa-copy me-2"></i>复制配置
                            </button>
                        </div>
                    </div>
                </div>
                
                <div class="card">
                    <div class="card-header">
                        <i class="fas fa-lightbulb me-2"></i>最佳实践说明
                    </div>
                    <div class="card-body">
                        <ul class="list-group list-group-flush">
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                <span class="highlight">关闭审计</span>功能以减少SYSTEM表空间占用
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                禁用<span class="highlight">AMM自动内存管理</span>,使用手工内存管理
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                在RAC环境中关闭<span class="highlight">DRM特性</span>以避免性能问题
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                禁用<span class="highlight">延迟段创建</span>特性以避免BUG
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                关闭优化器的<span class="highlight">自适应特性</span>以保持执行计划稳定
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                设置合理的<span class="highlight">控制文件保留时间</span>(≥31天)
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                对于OLTP系统,限制<span class="highlight">并行度</span>以避免资源争用
                            </li>
                            <li class="list-group-item">
                                <i class="fas fa-check-circle text-success me-2"></i>
                                使用<span class="highlight">自定义参数</span>添加特定需求配置
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <footer class="bg-dark text-white py-4 mt-5">
        <div class="container">
            <div class="row">
                <div class="col-md-6">
                    <h5>Oracle配置生成工具</h5>
                    <p class="text-muted">基于Oracle 11g/12c/19c最佳实践参数配置文档开发</p>
                </div>
                <div class="col-md-6 text-end">
                    <p class="mb-0">© 2023 数据库管理工具集</p>
                    <p class="text-muted">版本 1.2.1</p>
                </div>
            </div>
        </div>
    </footer>

    <!-- 提示消息容器 -->
    <div class="toast-container">
        <!-- 提示消息将通过JS动态添加 -->
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const dbVersion = document.getElementById('dbVersion');
            const deploymentType = document.getElementById('deploymentType');
            const generateBtn = document.getElementById('generateBtn');
            const downloadBtn = document.getElementById('downloadBtn');
            const copyBtn = document.getElementById('copyBtn');
            const configOutput = document.getElementById('configOutput');
            const versionBadge = document.getElementById('versionBadge');
            const racParams = document.getElementById('racParams');
            const sgaSize = document.getElementById('sgaSize');
            const pgaSize = document.getElementById('pgaSize');
            const addParamBtn = document.getElementById('addParamBtn');
            const customParamsContainer = document.getElementById('customParamsContainer');
            const toastContainer = document.querySelector('.toast-container');
            
            // 初始化隐藏RAC参数
            racParams.style.display = deploymentType.value === 'rac' ? 'block' : 'none';
            
            // 切换部署类型时显示/隐藏RAC参数
            deploymentType.addEventListener('change', function() {
                racParams.style.display = this.value === 'rac' ? 'block' : 'none';
            });
            
            // 切换数据库版本时更新徽章
            dbVersion.addEventListener('change', function() {
                versionBadge.textContent = `Oracle ${this.value.toUpperCase()}`;
            });
            
            // 添加自定义参数行
            addParamBtn.addEventListener('click', function() {
                const paramRow = document.createElement('div');
                paramRow.className = 'custom-param-row row align-items-center';
                paramRow.innerHTML = `
                    <div class="col-md-5">
                        <input type="text" class="form-control custom-param-name" placeholder="参数名 (例如: _optimizer_features_enable)">
                    </div>
                    <div class="col-md-5">
                        <input type="text" class="form-control custom-param-value" placeholder="参数值 (例如: 12.2.0.1)">
                    </div>
                    <div class="col-md-2">
                        <button class="btn btn-danger w-100 remove-param-btn">
                            <i class="fas fa-trash"></i>
                        </button>
                    </div>
                `;
                customParamsContainer.appendChild(paramRow);
                
                // 添加删除按钮事件
                const removeBtn = paramRow.querySelector('.remove-param-btn');
                removeBtn.addEventListener('click', function() {
                    paramRow.remove();
                    showToast('已移除自定义参数', 'info');
                });
            });
            
            // 生成配置文件
            generateBtn.addEventListener('click', function() {
                const version = dbVersion.value;
                const isRAC = deploymentType.value === 'rac';
                const sga = `${sgaSize.value}G`;
                const pga = `${pgaSize.value}G`;
                
                // 收集预设参数
                const presetParams = {};
                document.querySelectorAll('.param-value').forEach(input => {
                    const paramName = input.closest('.param-row').querySelector('.param-name').textContent;
                    presetParams[paramName] = input.value;
                });
                
                // 收集自定义参数
                const customParams = [];
                document.querySelectorAll('.custom-param-row').forEach(row => {
                    const nameInput = row.querySelector('.custom-param-name');
                    const valueInput = row.querySelector('.custom-param-value');
                    if (nameInput.value && valueInput.value) {
                        customParams.push({
                            name: nameInput.value,
                            value: valueInput.value
                        });
                    }
                });
                
                let config = `# Oracle数据库初始化参数配置文件
# 版本: Oracle ${version.toUpperCase()}
# 生成时间: ${new Date().toLocaleString()}
# 部署类型: ${isRAC ? 'RAC集群' : '单实例'}

# =====================
# 基本参数配置
# =====================
db_name = ORCL
db_domain = example.com
control_files = ('/u01/app/oracle/oradata/ORCL/control01.ctl', '/u02/app/oracle/oradata/ORCL/control02.ctl')
memory_target = ${presetParams['memory_target']}
memory_max_target = 0
sga_max_size = ${sga}
sga_target = ${sga}
pga_aggregate_target = ${pga}
processes = 1500
sessions = 1655
open_cursors = 500
db_files = 1024

# =====================
# 内存管理参数
# =====================
_shared_pool_reserved_pct = ${presetParams['_shared_pool_reserved_pct']}
db_cache_advice = OFF

# =====================
# 优化器参数
# =====================
optimizer_features_enable = ${version === '11g' ? '11.2.0.4' : '12.2.0.1'}
_optimizer_adaptive_cursor_sharing = ${presetParams['_optimizer_adaptive_cursor_sharing']}
_optimizer_use_feedback = ${presetParams['_optimizer_use_feedback']}
_optimizer_extended_cursor_sharing = ${presetParams['_optimizer_extended_cursor_sharing']}
_optimizer_extended_cursor_sharing_rel = ${presetParams['_optimizer_extended_cursor_sharing_rel'] || 'NONE'}
_b_tree_bitmap_plans = ${presetParams['_b_tree_bitmap_plans']}
_bloom_filter_enabled = ${presetParams['_bloom_filter_enabled']}
_optimizer_adaptive_plans = FALSE
_optimizer_ads_use_result_cache = FALSE

`;

                if (isRAC) {
                    config += `# =====================
# RAC集群参数
# =====================
cluster_database = TRUE
cluster_database_instances = 2
instance_number = 1
thread = 1
parallel_force_local = ${presetParams['parallel_force_local']}
_gc_policy_time = ${presetParams['_gc_policy_time']}
_gc_undo_affinity = ${presetParams['_gc_undo_affinity']}
_lm_sync_timeout = ${presetParams['_lm_sync_timeout']}

`;
                } else {
                    config += `# =====================
# 单实例参数
# =====================
cluster_database = FALSE

`;
                }

                config += `# =====================
# 存储参数
# =====================
db_block_size = 8192
db_file_multiblock_read_count = 128
deferred_segment_creation = ${presetParams['deferred_segment_creation']}
_partition_large_extents = FALSE
_index_partition_large_extents = FALSE

# =====================
# 日志与恢复参数
# =====================
log_buffer = 128M
log_checkpoint_interval = 0
log_checkpoint_timeout = 1800
fast_start_mttr_target = 300
_use_adaptive_log_file_sync = ${presetParams['_use_adaptive_log_file_sync']}

# =====================
# UNDO参数
# =====================
undo_management = AUTO
undo_tablespace = UNDOTBS1
undo_retention = 900
_undo_autotune = ${presetParams['_undo_autotune']}

# =====================
# 诊断与跟踪参数
# =====================
diagnostic_dest = /u01/app/oracle
enable_ddl_logging = TRUE
max_dump_file_size = 10240M

# =====================
# 其他参数
# =====================
control_file_record_keep_time = ${presetParams['control_file_record_keep_time']}
resource_manager_plan = 'FORCE:'
parallel_max_servers = 64
parallel_min_servers = 0
audit_trail = ${presetParams['audit_trail']}
sec_case_sensitive_logon = FALSE
sec_max_failed_login_attempts = 10

`;

                // 添加自定义参数部分
                if (customParams.length > 0) {
                    config += `# =====================
# 自定义参数
# =====================\n`;
                    customParams.forEach(param => {
                        config += `${param.name} = ${param.value}\n`;
                    });
                }

                configOutput.textContent = config;
                showToast('配置已成功生成!', 'success');
            });
            
            // 下载配置文件
            downloadBtn.addEventListener('click', function() {
                const config = configOutput.textContent;
                if (config.includes('请点击"生成配置文件"')) {
                    showToast('请先生成配置文件再下载!', 'warning');
                    return;
                }
                
                const version = dbVersion.value;
                const isRAC = deploymentType.value === 'rac' ? '_RAC' : '';
                const filename = `oracle_init_${version}${isRAC}.ora`;
                
                const blob = new Blob([config], { type: 'text/plain' });
                const url = URL.createObjectURL(blob);
                
                const a = document.createElement('a');
                a.href = url;
                a.download = filename;
                document.body.appendChild(a);
                a.click();
                
                setTimeout(() => {
                    document.body.removeChild(a);
                    URL.revokeObjectURL(url);
                }, 100);
                
                showToast('配置文件已开始下载!', 'success');
            });
            
            // 复制配置文件 - 优化后的复制功能
            copyBtn.addEventListener('click', function() {
                const config = configOutput.textContent;
                if (config.includes('请点击"生成配置文件"')) {
                    showToast('请先生成配置文件再复制!', 'warning');
                    return;
                }
                
                // 创建一个临时的textarea元素用于复制
                const textArea = document.createElement('textarea');
                textArea.value = config;
                textArea.style.position = 'fixed';
                textArea.style.left = '-9999px';
                textArea.style.top = '-9999px';
                document.body.appendChild(textArea);
                textArea.select();
                
                try {
                    const successful = document.execCommand('copy');
                    document.body.removeChild(textArea);
                    
                    if (successful) {
                        showToast('配置已成功复制到剪贴板!', 'success');
                    } else {
                        showToast('复制失败,请手动选择并复制配置内容', 'danger');
                    }
                } catch (err) {
                    document.body.removeChild(textArea);
                    showToast('复制失败,请手动选择并复制配置内容', 'danger');
                }
            });
            
            // 添加删除按钮事件(初始)
            document.querySelectorAll('.remove-param-btn').forEach(btn => {
                btn.addEventListener('click', function() {
                    this.closest('.custom-param-row').remove();
                    showToast('已移除自定义参数', 'info');
                });
            });
            
            // 显示提示消息
            function showToast(message, type) {
                // 移除现有toast
                while (toastContainer.firstChild) {
                    toastContainer.removeChild(toastContainer.firstChild);
                }
                
                // 创建新的toast
                const toastEl = document.createElement('div');
                toastEl.className = `toast show`;
                toastEl.setAttribute('role', 'alert');
                toastEl.setAttribute('aria-live', 'assertive');
                toastEl.setAttribute('aria-atomic', 'true');
                
                let iconClass = 'fas fa-info-circle';
                let headerClass = 'bg-primary';
                
                switch(type) {
                    case 'success':
                        iconClass = 'fas fa-check-circle';
                        headerClass = 'bg-success';
                        break;
                    case 'warning':
                        iconClass = 'fas fa-exclamation-triangle';
                        headerClass = 'bg-warning';
                        break;
                    case 'danger':
                        iconClass = 'fas fa-times-circle';
                        headerClass = 'bg-danger';
                        break;
                    case 'info':
                        iconClass = 'fas fa-info-circle';
                        headerClass = 'bg-info';
                        break;
                }
                
                toastEl.innerHTML = `
                    <div class="toast-header ${headerClass}">
                        <i class="${iconClass} me-2"></i>
                        <strong class="me-auto">系统提示</strong>
                        <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
                    </div>
                    <div class="toast-body">
                        ${message}
                    </div>
                `;
                
                toastContainer.appendChild(toastEl);
                
                // 5秒后自动隐藏
                setTimeout(() => {
                    toastEl.remove();
                }, 5000);
            }
            
            // 初始生成一次配置
            generateBtn.click();
        });
    </script>
</body>
</html>

网站公告

今日签到

点亮在社区的每一天
去签到