【翻译自mos文章】在11.2中,使用DBMS_SERVICE.CREATE_SERVICE 能最多创建多少个service?

Oracle 11.2服务限制
在Oracle Database 11.2中,默认情况下每个数据库实例最多可以创建115个服务。从11.2.0.3版本开始,可以通过设置_max_services参数来增加此限制,最高可达150个服务。

【翻译自mos文章】在11.2中,使用DBMS_SERVICE.CREATE_SERVICE 能最多创建多少个service?

适用于:
racle Database - Enterprise Edition - Version 11.2.0.1 and later
Information in this document applies to any platform.

解决方案:
According to Bug:9683133 CANNOT CREATE MORE THAN 115 SERVICES PER DATABASE we support up to 115 services for RDBMS 11.2.0.1.

Starting in RDBMS 11.2.0.3 version one can set a new database parameter _max_services=150 to be able to have up to 150 services.

### 使用 `DBMS_SCHEDULER.CREATE_JOB` 创建 Oracle 数据库中的任务 在 Oracle 数据库中,`DBMS_SCHEDULER.CREATE_JOB` 是用于创建调度任务的核心 PL/SQL 过程。通过该过程可以定义一次性或重复执行的任务,并指定任务的行为和触发条件。 以下是详细的使用方法以及示例: #### 1. 基本语法 `DBMS_SCHEDULER.CREATE_JOB` 的基本语法如下所示[^3]: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => '<job_name>', job_type => '<job_type>', job_action => '<job_action>', start_date => '<start_date>', repeat_interval => '<repeat_interval>', end_date => '<end_date>', enabled => TRUE | FALSE, auto_drop => TRUE | FALSE, comments => '<comments>' ); END; / ``` - **`job_name`**: 指定任务名称,在同一 schema 中必须唯一。 - **`job_type`**: 定义任务的类型,常见的有 `'PLSQL_BLOCK'`, `'STORED_PROCEDURE'`, 和其他自定义类型。 - **`job_action`**: 根据 `job_type` 不同而变化。如果是 `'STORED_PROCEDURE'` 类型,则填写存储过程名;如果是 `'PLSQL_BLOCK'` 则填写匿名块代码。 - **`repeat_interval`**: 设置任务的重复频率,通常采用 cron 表达式的格式。 - **`enabled`**: 是否立即启用任务,默认为 `TRUE` 或 `FALSE`。 - **`auto_drop`**: 如果设置为 `TRUE`,则当任务完成后会自动删除任务。 --- #### 2. 示例:创建一个简单的定时任务 下面是一个具体的例子,展示如何创建每分钟运行一次的任务[^2]: ```sql BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'TIME_JOB', job_type => 'STORED_PROCEDURE', job_action => 'PRINT_NOW_TIME', repeat_interval => 'FREQ=MINUTELY;', comments => 'Run every minute' ); END; / ``` 在此示例中: - **`job_name`** 被命名为 `'TIME_JOB'`。 - **`job_type`** 设为 `'STORED_PROCEDURE'`,表示此任务将调用已存在的存储过程。 - **`job_action`** 指向名为 `'PRINT_NOW_TIME'` 的存储过程。 - **`repeat_interval`** 配置为每分钟运行一次。 --- #### 3. 更复杂的场景:动态生成 JOB 名称并附加额外逻辑 如果需要动态生成 JOB 名称或者附带更多复杂配置,可以通过以下方式实现[^3]: ```sql DECLARE v_job_name VARCHAR2(100); BEGIN -- 动态生成 JOB 名称 v_job_name := DBMS_SCHEDULER.GENERATE_JOB_NAME || '_MY_CUSTOM_SUFFIX'; DBMS_SCHEDULER.CREATE_JOB ( job_name => v_job_name, job_type => 'PLSQL_BLOCK', job_action => 'BEGIN INSERT INTO LOG_TABLE VALUES(SYSDATE); COMMIT; END;', start_date => SYSTIMESTAMP, -- 当前时间启动 repeat_interval => 'FREQ=DAILY;', -- 每天运行一次 enabled => TRUE, comments => 'Insert current date into log table daily.' ); DBMS_OUTPUT.PUT_LINE('Created Job: ' || v_job_name); END; / ``` 在这个更高级的例子中: - 使用了 `DBMS_SCHEDULER.GENERATE_JOB_NAME` 来动态生成唯一的 JOB 名称。 - 将 `job_action` 设置为一段嵌入式 PL/SQL 匿名块,完成特定操作(如记录日志到表)。 --- #### 4. 手动控制任务状态 除了创建任务外,还可以手动调整任务的状态,比如启用、禁用或删除任务[^1]: - 启用任务: ```sql BEGIN DBMS_SCHEDULER.ENABLE('JOB_FLUSH_SEARCH_ENGINES'); END; / ``` - 禁用任务: ```sql BEGIN DBMS_SCHEDULER.DISABLE('JOB_FLUSH_SEARCH_ENGINES'); END; / ``` - 删除任务: ```sql BEGIN DBMS_SCHEDULER.DROP_JOB('JOB_FLUSH_SEARCH_ENGINES'); END; / ``` --- #### 5. 注意事项 - 在修改外部文件参数时(例如 `externaljob.ora`),需确保权限正确分配给目标用户组[^1]。 - 若涉及跨 Schema 的任务创建,请显式声明所属 Schema 名称以避免冲突。 - 对于频繁使用的任务模板,建议提前规划好命名规则以便维护。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值