关键代码如下:
<!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>