Script:List Grid Control Jobs

本文提供了一个 Oracle GridControl 脚本,用于列出定式作业的详细信息,包括名称、所有者、类型、状态、目标类型等,并提供了作业调度频率、开始时间、结束时间、参数信息、目标和执行历史等关键数据。
以下脚本可以用于列出Grid Control中的定式作业:
SET verify OFF
SET linesize 255
SET pagesize 128
SET trimout ON
SET trimspool ON
SPOOL jobdump.log
ALTER SESSION SET nls_date_format='MON-DD-YYYY hh:mi:ss pm';
 
COLUMN status format a15
 
COLUMN job_name FORMAT a64
COLUMN job_type FORMAT a32
COLUMN job_owner FORMAT a32
COLUMN job_status format 99
COLUMN target_type format a64
 
COLUMN frequency_code format a20
COLUMN  interval format 99999999
 
VARIABLE JOBID VARCHAR2(64);
 
PROMPT *********************** JOB INFO ********************************
 
REM Get the job id
SET serveroutput on
BEGIN
    SELECT job_id INTO :JOBID
    FROM   MGMT_JOB
    WHERE  job_name='&&jobName'
    AND    job_owner='&&jobOwner'
    AND    nested=0;
 
EXCEPTION
    WHEN NO_DATA_FOUND THEN
    BEGIN
        DBMS_OUTPUT.put_line('JOB NOT FOUND, TRYING NAME ONLY');
        SELECT job_id INTO :JOBID
        FROM   MGMT_JOB
        WHERE  job_name='&&jobName'
        AND    nested=0
        AND    ROWNUM=1;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.put_line('JOB NOT FOUND');
    END;
END;
/
 
SELECT  job_name, job_owner, job_type, system_job, job_status, target_type
FROM    MGMT_JOB
WHERE   job_id=HEXTORAW(:JOBID);
 
PROMPT *********************** JOB SCHEDULE ****************************
SELECT  DECODE(frequency_code,
               1, 'Once',
               2, 'Interval',
               3, 'Daily',
               4, 'Day of Week',
               5, 'Day of Month',
               6, 'Day of Year', frequency_code) "FREQUENCY_CODE",
        start_time, end_time, execution_hours, execution_minutes,
        interval, months, days, timezone_info, timezone_target_index,
        timezone_offset, timezone_region
FROM    MGMT_JOB_SCHEDULE s, MGMT_JOB j
WHERE   s.schedule_id=j.schedule_id
AND     j.job_id=HEXTORAW(:JOBID);
 
PROMPT ********************** PARAMETERS ********************************
SELECT  parameter_name,
        decode(parameter_type,
               0, 'Scalar',
               1, 'Vector',
               2, 'Large', parameter_type) "PARAMETER_TYPE",
        scalar_value, vector_value
FROM    MGMT_JOB_PARAMETER
WHERE   job_id=HEXTORAW(:JOBID)
AND     execution_id=HEXTORAW('0000000000000000')
ORDER BY parameter_name;
 
PROMPT ********************** TARGETS ********************************
SELECT  target_name, target_type
FROM    MGMT_JOB_TARGET jt, MGMT_TARGETS t
WHERE   job_id=HEXTORAW(:JOBID)
AND     execution_id=HEXTORAW('0000000000000000')
AND     jt.target_guid=t.target_guid
ORDER BY target_type, target_name;
 
PROMPT ********************** FLAT TARGETS ********************************
SELECT  target_name, target_type
FROM    MGMT_JOB_FLAT_TARGETS jft, MGMT_TARGETS t
WHERE   job_id=HEXTORAW(:JOBID)
AND     jft.target_guid=t.target_guid
ORDER BY target_type, target_name;
 
 
PROMPT ************************ EXECUTIONS *******************************
SELECT  execution_id,
        DECODE(status,
               1, 'SCHEDULED',
               2, 'RUNNING',
               3, 'FAILED INIT',
               4, 'FAILED',
               5, 'SUCCEEDED',
               6, 'SUSPENDED',
               7, 'AGENT DOWN',
               8, 'STOPPED',
               9, 'SUSPENDED/LOCK',
               10, 'SUSPENDED/EVENT',
               11, 'SUSPENDED/BLACKOUT',
               12, 'STOP PENDING',
               13, 'SUSPEND PENDING',
               14, 'INACTIVE',
               15, 'QUEUED',
               16, 'FAILED/RETRIED',
               17, 'WAITING',
               18, 'SKIPPED', status) "STATUS",
        scheduled_time, start_time, end_time
FROM    MGMT_JOB_EXEC_SUMMARY e
WHERE   job_id=HEXTORAW(:JOBID)
ORDER BY scheduled_time;
 
 
UNDEFINE jobName
UNDEFINE jobOwner
UNDEFINE JOBID


SPOOL OFF

转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2967940.html

import tkinter as tk from tkinter import ttk, filedialog, messagebox import pandas as pd import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, r2_score from sklearn.neural_network import MLPRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.svm import SVR from skopt import BayesSearchCV from skopt.space import Real, Categorical, Integer import threading from pandas import ExcelWriter import numpy as np # 全局字体配置 mpl.rcParams['font.family'] = 'sans-serif' mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei'] mpl.rcParams['axes.unicode_minus'] = False class MLGUI: def __init__(self, master): self.master = master master.title("智能预测建模系统 v5.0") master.geometry("1400x900") # 初始化变量 self.file_path = tk.StringVar() self.n_features = tk.IntVar(value=5) self.n_targets = tk.IntVar(value=1) self.results = {} self.predictions = pd.DataFrame() self.export_dataframe = pd.DataFrame() self.scalers = {'X': None, 'Y': None} # 模型配置(统一命名规范) self.model_config = { "BP神经网络": {"var": tk.BooleanVar(value=True), "optimize": tk.BooleanVar(value=True)}, "随机森林": {"var": tk.BooleanVar(value=True), "optimize": tk.BooleanVar()}, "支持向量回归": {"var": tk.BooleanVar(value=True), "optimize": tk.BooleanVar(value=True)} } self.create_widgets() def create_widgets(self): # 控制面板 control_frame = ttk.LabelFrame(self.master, text="控制面板", width=350) control_frame.pack(side=tk.LEFT, fill=tk.Y, padx=10, pady=10) # 文件选择 ttk.Label(control_frame, text="1. 选择数据集:").grid(row=0, column=0, sticky=tk.W, pady=5) ttk.Entry(control_frame, textvariable=self.file_path, width=30).grid(row=1, column=0, padx=5) ttk.Button(control_frame, text="浏览...", command=self.select_file).grid(row=1, column=1) # 变量设置 ttk.Label(control_frame, text="2. 设置变量数量:").grid(row=2, column=0, sticky=tk.W, pady=10) ttk.Label(control_frame, text="自变量列数:").grid(row=3, column=0, sticky=tk.W) ttk.Spinbox(control_frame, from_=1, to=10, textvariable=self.n_features, width=8).grid(row=3, column=1) ttk.Label(control_frame, text="因变量列数:").grid(row=4, column=0, sticky=tk.W) ttk.Spinbox(control_frame, from_=1, to=20, textvariable=self.n_targets, width=8).grid(row=4, column=1) # 模型选择 ttk.Label(control_frame, text="3. 选择模型 (✓优化启用贝叶斯调参):").grid(row=5, column=0, sticky=tk.W, pady=10) row = 6 for model, config in self.model_config.items(): ttk.Checkbutton(control_frame, text=model, variable=config['var']).grid(row=row, column=0, sticky=tk.W) ttk.Checkbutton(control_frame, text="优化", variable=config['optimize']).grid(row=row, column=1) row += 1 # 操作按钮 ttk.Button(control_frame, text="开始建模预测", command=self.start_analysis, style='Accent.TButton').grid(row=10, column=0, columnspan=2, pady=10) ttk.Button(control_frame, text="导出结果", command=self.export_data, style='Accent.TButton').grid(row=11, column=0, columnspan=2, pady=10) # 结果面板 result_frame = ttk.LabelFrame(self.master, text="预测结果") result_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10) # 可视化区域 self.figure = plt.Figure(figsize=(10, 10), dpi=100) self.canvas = FigureCanvasTkAgg(self.figure, master=result_frame) self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True) # 状态栏 self.status = ttk.Label(self.master, text="就绪", relief=tk.SUNKEN, anchor=tk.W) self.status.pack(side=tk.BOTTOM, fill=tk.X) def select_file(self): path = filedialog.askopenfilename(filetypes=[("CSV文件", "*.csv")]) if path: self.file_path.set(path) self.preview_data() def preview_data(self): try: data = pd.read_csv(self.file_path.get()) self.n_features.set(min(5, len(data.columns)-1)) self.n_targets.set(1) self.update_status(f"已加载数据集: {len(data)} 行 × {len(data.columns)} 列") except Exception as e: self.update_status(f"错误: {str(e)}", error=True) def update_status(self, text, error=False): self.status.config(text=text, foreground="red" if error else "black") def start_analysis(self): if not self.file_path.get(): self.update_status("错误: 请先选择数据集文件!", error=True) return threading.Thread(target=self.run_analysis).start() def run_analysis(self): try: self.master.config(cursor="watch") self.results = {} self.predictions = pd.DataFrame() self.scalers = {'X': None, 'Y': None} # 加载数据 self.update_status("正在加载数据...") data = pd.read_csv(self.file_path.get()) n_total = len(data.columns) n_features = self.n_features.get() n_targets = self.n_targets.get() if n_features + n_targets > n_total: raise ValueError(f"总列数不足:需要{n_features+n_targets}列,实际{n_total}列") X = data.iloc[:, :n_features].values Y = data.iloc[:, n_features:n_features+n_targets].values target_names = data.columns[n_features:n_features+n_targets].tolist() # 数据标准化(增强版) self.scalers['X'] = StandardScaler() X_scaled = self.scalers['X'].fit_transform(X) self.scalers['Y'] = StandardScaler() Y_scaled = self.scalers['Y'].fit_transform(Y) # 参数空间(优化版) param_spaces = { "BP神经网络": { 'hidden_layer_sizes': Categorical([(50,30), (30,15), (20,10)]), 'activation': Categorical(['relu', 'tanh']), 'alpha': Real(1e-5, 1e-3, prior='log-uniform'), 'learning_rate_init': Real(0.001, 0.1), 'max_iter': Integer(1000, 3000) # 显著增加迭代范围 }, "随机森林": { 'n_estimators': Integer(50, 200), 'max_depth': Integer(5, 30), 'min_samples_split': Integer(2, 10) }, "支持向量回归": { 'C': Real(0.1, 1000, prior='log-uniform'), 'gamma': Real(1e-4, 1e1, prior='log-uniform'), 'epsilon': Real(0.01, 0.2) } } # 基础模型配置(增强稳定性) base_models = { "BP神经网络": MLPRegressor( early_stopping=True, n_iter_no_change=30, random_state=42, max_iter=2000 # 设置默认最大迭代 ), "随机森林": RandomForestRegressor( random_state=42, n_estimators=100 ), "支持向量回归": SVR( kernel='rbf', C=10, gamma='scale' ) } all_results = [] pred_df = pd.DataFrame() # 数据分割 X_train, X_pred, Y_train_scaled, Y_pred_true_scaled = train_test_split( X_scaled, Y_scaled, test_size=0.3, random_state=42) for target_idx in range(n_targets): y_train_scaled = Y_train_scaled[:, target_idx] y_pred_true_scaled = Y_pred_true_scaled[:, target_idx] target_name = target_names[target_idx] # 实际值反标准化 actual_values = self.scalers['Y'].inverse_transform( np.concatenate( [ y_pred_true_scaled.reshape(-1,1), np.zeros((len(y_pred_true_scaled), n_targets-1)) ], axis=1 ) )[:, target_idx] pred_df[f'{target_name}_实际值'] = actual_values for model_name in self.model_config: if not self.model_config[model_name]['var'].get(): continue try: # 贝叶斯优化 if self.model_config[model_name]['optimize'].get(): self.update_status(f"优化中 [{model_name}-{target_name}]...") opt = BayesSearchCV( estimator=base_models[model_name], search_spaces=param_spaces[model_name], n_iter=30, cv=5, n_jobs=-1, random_state=42 ) opt.fit(X_train, y_train_scaled) model = opt.best_estimator_ params = opt.best_params_ else: # 默认训练(增强SVR默认参数) self.update_status(f"训练中 [{model_name}-{target_name}]...") model = base_models[model_name].set_params(**{ 'verbose': False, 'random_state': 42 }) if model_name == "支持向量回归": model.set_params(**{ 'max_iter': 5000 # 增加SVR默认迭代次数 }) model.fit(X_train, y_train_scaled) params = model.get_params() # 预测评估 try: y_pred_scaled = model.predict(X_pred) y_pred = self.scalers['Y'].inverse_transform( np.concatenate( [ y_pred_scaled.reshape(-1,1), np.zeros((len(y_pred_scaled), n_targets-1)) ], axis=1 ) )[:, target_idx] y_true = pred_df[f'{target_name}_实际值'].values mse = mean_squared_error(y_true, y_pred) r2 = r2_score(y_true, y_pred) except Exception as pred_error: self.update_status(f"{model_name}预测失败: {str(pred_error)}", error=True) continue # 存储结果 pred_col = f'{target_name}_{model_name}' if self.model_config[model_name]['optimize'].get(): pred_col += '(优化)' pred_df[pred_col] = y_pred all_results.append({ "目标变量": target_name, "模型": f"{model_name}{'(优化)' if self.model_config[model_name]['optimize'].get() else ''}", "参数": str(params), "MSE": mse, "R2": r2 }) except Exception as e: self.update_status(f"{model_name}训练失败: {str(e)}", error=True) continue self.export_dataframe = pd.DataFrame(all_results) self.predictions = pred_df self.master.after(0, self.visualize_results) self.update_status("建模完成!") except Exception as e: self.update_status(f"系统错误: {str(e)}", error=True) finally: self.master.config(cursor="") def visualize_results(self): self.figure.clear() ax1 = self.figure.add_subplot(211) ax2 = self.figure.add_subplot(212) ax1.axis('off') table_data = [] columns = ['目标变量', '模型', 'MSE', 'R²'] for _, row in self.export_dataframe.iterrows(): table_data.append([ row['目标变量'], row['模型'], f"{row['MSE']:.4f}", f"{row['R2']:.4f}" ]) table = ax1.table( cellText=table_data, colLabels=columns, loc='center', cellLoc='center', colColours=['#f0f0f0']*4 ) table.set_fontsize(8) table.scale(1.2, 1.2) ax1.set_title('模型性能评估表', fontsize=10) if not self.predictions.empty: target_columns = [col for col in self.predictions.columns if '_实际值' in col] for idx, target_col in enumerate(target_columns[:2]): target_name = target_col.replace('_实际值', '') actual = self.predictions[target_col] ax2.plot(actual.values, label=f'{target_name} 实际值', color='blue', linestyle='--', marker='o', markersize=4) model_cols = [col for col in self.predictions.columns if col.startswith(f'{target_name}_') and '实际值' not in col] colors = ['green', 'red', 'purple', 'orange'] for i, model_col in enumerate(model_cols): model_name = model_col.split('_')[-1].replace('(优化)', '') pred = self.predictions[model_col] ax2.plot(pred.values, label=f'{model_name}预测', color=colors[i], alpha=0.7, linestyle='-', linewidth=1.5) ax2.set_xlabel('样本序号', fontsize=9) ax2.set_ylabel('数值', fontsize=9) ax2.set_title(f'{target_name} 实际值与预测值对比', fontsize=10) ax2.legend(loc='upper right', fontsize=8) ax2.grid(True, linestyle='--', alpha=0.5) ax2.tick_params(axis='both', labelsize=8) self.figure.tight_layout() self.canvas.draw() def export_data(self): if self.export_dataframe.empty or self.predictions.empty: messagebox.showerror("错误", "没有可导出的结果!") return path = filedialog.asksaveasfilename( defaultextension=".xlsx", filetypes=[('Excel 文件', '*.xlsx'), ('CSV 文件', '*.csv')] ) if path: try: if path.endswith('.xlsx'): with ExcelWriter(path) as writer: self.export_dataframe.to_excel(writer, index=False, sheet_name='模型评估') self.predictions.to_excel(writer, index=False, sheet_name='预测结果') else: self.export_dataframe.to_csv(path, index=False) self.predictions.to_csv(f"{path}_predictions.csv", index=False) messagebox.showinfo("成功", f"结果已保存至:{path}") except Exception as e: messagebox.showerror("导出失败", f"错误原因:{str(e)}") if __name__ == "__main__": root = tk.Tk() style = ttk.Style() style.configure('Accent.TButton', foreground='white', background='#0078D7') app = MLGUI(root) root.mainloop()此代码运行中出现bp神经网络开启贝叶斯优化后消失以及支持向量回归在开启优化前消失的问题,请修正并给出完整代码。
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值