Ausführen allgemeiner Planungsaufgaben für Oracle DB-Instances - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ausführen allgemeiner Planungsaufgaben für Oracle DB-Instances

Einige SYS-eigene Scheduler-Aufträge können den normalen Datenbankbetrieb stören. Oracle Support empfiehlt, diese Aufträge zu deaktivieren oder den Zeitplan zu ändern. Sie können das Amazon RDS-Paket rdsadmin.rdsadmin_dbms_scheduler verwenden, um Aufgaben für SYS-eigene Oracle-Scheduler-Jobs auszuführen.

Die rdsadmin.rdsadmin_dbms_scheduler-Prozeduren werden für die folgenden Amazon-RDS-for-Oracle-DB-Engine-Versionen unterstützt:

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c

Geläufige Parameter für Oracle Scheduler-Prozeduren

Um Aufgaben mit dem Oracle Scheduler auszuführen, verwenden Sie Prozeduren im Amazon RDS-Paket rdsadmin.rdsadmin_dbms_scheduler. Den Verfahren im Paket sind mehrere Parameter gemeinsam. Das Paket besitzt die folgenden geläufigen Parameter.

Parametername Datentyp Zulässige Werte Standard Erforderlich Beschreibung

name

varchar2

'SYS.BSLN_MAINTAIN_STATS_JOB','SYS.CLEANUP_ONLINE_IND_BUILD'

Ja

Der Name des zu ändernden Jobs.

Anmerkung

Derzeit können Sie nur SYS.CLEANUP_ONLINE_IND_BUILD- und SYS.BSLN_MAINTAIN_STATS_JOB-Jobs ändern.

attribute

varchar2

'REPEAT_INTERVAL','SCHEDULE_NAME'

Ja

Zu änderndes Attribut.

Um das Wiederholungsintervall für den Job zu ändern, geben Sie a 'REPEAT_INTERVAL'.

Um den Zeitplannamen für den Job zu ändern, geben Sie a 'SCHEDULE_NAME'.

value

varchar2

Ein gültiges Zeitintervall oder ein gültiger Zeitplanname, abhängig vom verwendeten Attribut.

Ja

Der neue Wert des Attributs.

Ändern von DBMS SCHEDULER-Aufgaben

Sie können die Oracle-Prozedur dbms_scheduler.set_attribute verwenden, um bestimmte Komponenten des Oracle Schedulers zu ändern. Weitere Informationen finden Sie unter DBMS_SCHEDULER und SET_ATTRIBUTE procedure in der Oracle-Dokumentation.

Stellen Sie bei der Arbeit mit Amazon RDS-DB-Instances den Schemanamen SYS dem Objektnamen voran. Im folgenden Beispiel wird ein Ressourcenplan-Attribut für das Fensterobjekt "Monday" festgelegt.

BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'SYS.MONDAY_WINDOW', attribute => 'RESOURCE_PLAN', value => 'resource_plan_1'); END; /

AutoTask Wartungsfenster ändern

Instances von Amazon RDS for Oracle werden mit Standardeinstellungen für Wartungsfenster erstellt. Automatisierte Wartungsaufgaben wie die Erfassung von Optimierungsstatistiken werden in diesen Zeitfenstern ausgeführt. Standardmäßig aktivieren die Wartungsfenster Oracle Database Resource Manager.

Sie können das DBMS_SCHEDULER-Paket verwenden, um ein Wartungsfenster zu ändern. Möglicherweise müssen Sie die Einstellungen für Wartungsfenster aus den folgenden Gründen ändern:

  • Sie möchten, dass Wartungsaufträge zu einem anderen Zeitpunkt, mit anderen Einstellungen oder gar nicht ausgeführt werden. Sie können beispielsweise die Dauer des Wartungsfensters ändern oder die Wiederholungszeit und das Intervall ändern.

  • Sie möchten die Leistungsbeeinträchtigung durch die Aktivierung von Resource Manager während der Wartung vermeiden. Wenn beispielsweise der Standard-Wartungsplan angegeben ist und das Wartungsfenster beginnt, während die Datenbank ausgelastet ist, können Warteereignisse wie resmgr:cpu quantum ausgegeben werden. Dieses Warteereignis bezieht sich auf Database Resource Manager. Ihnen stehen folgende Optionen zur Verfügung:

    • Stellen Sie sicher, dass Wartungsfenster außerhalb der Spitzenzeiten für Ihre DB-Instance aktiv sind.

    • Deaktivieren Sie den Standard-Wartungsplan, indem Sie für das Attribut resource_plan eine leere Zeichenfolge angeben.

    • Legen Sie den Parameter resource_manager_plan in der Parametergruppe auf FORCE: fest. Wenn Ihre Instance die Enterprise Edition verwendet, wird durch diese Einstellung verhindert, dass Database-Resource-Manager-Pläne aktiviert werden.

Ändern Sie die Einstellungen eines Wartungsfensters wie folgt:
  1. Verbinden Sie Ihren Oracle-SQL-Client mit der Datenbank.

  2. Fragen Sie die aktuelle Konfiguration für ein Scheduler-Wartungsfenster ab.

    Im folgenden Beispiel wird die Konfiguration für MONDAY_WINDOW abgefragt.

    SELECT ENABLED, RESOURCE_PLAN, DURATION, REPEAT_INTERVAL FROM DBA_SCHEDULER_WINDOWS WHERE WINDOW_NAME='MONDAY_WINDOW';

    Die folgende Ausgabe zeigt, dass für das Wartungsfenster die Standardwerte verwendet werden.

    ENABLED RESOURCE_PLAN DURATION REPEAT_INTERVAL --------------- ------------------------------ ---------------- ------------------------------ TRUE DEFAULT_MAINTENANCE_PLAN +000 04:00:00 freq=daily;byday=MON;byhour=22 ;byminute=0; bysecond=0
  3. Ändern Sie das Wartungsfenster mit dem DBMS_SCHEDULER-Paket.

    Im folgenden Beispiel wird der Ressourcenplan auf null festgelegt, damit Resource Manager nicht während des Wartungsfensters ausgeführt wird.

    BEGIN -- disable the window to make changes DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); -- specify the empty string to use no plan DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'RESOURCE_PLAN', value=>''); -- re-enable the window DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

    Im folgenden Beispiel wird die maximale Dauer des Wartungsfensters auf 2 Stunden eingestellt.

    BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'DURATION', value=>'0 2:00:00'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

    Im folgenden Beispiel wird das Wiederholungsintervall auf montags 10 Uhr festgelegt.

    BEGIN DBMS_SCHEDULER.DISABLE(name=>'"SYS"."MONDAY_WINDOW"',force=>TRUE); DBMS_SCHEDULER.SET_ATTRIBUTE(name=>'"SYS"."MONDAY_WINDOW"', attribute=>'REPEAT_INTERVAL', value=>'freq=daily;byday=MON;byhour=10;byminute=0;bysecond=0'); DBMS_SCHEDULER.ENABLE(name=>'"SYS"."MONDAY_WINDOW"'); END; /

Festlegen der Zeitzone für Oracle Scheduler-Aufgaben

Um die Zeitzone für Oracle Scheduler zu ändern, können Sie die Oracle-Prozedur verwende dbms_scheduler.set_scheduler_attribute. Weitere Informationen über das dbms_scheduler-Paket finden Sie unter DBMS_SCHULER und SET_SCHULER_ATTRIBUTE in der Oracle-Dokumentation.

So ändern Sie die Einstellung für die aktuelle Zeitzone
  1. Stellen Sie mithilfe eines Clients wie SQL Developer eine Verbindung zur Datenbank her. Weitere Informationen finden Sie unter Herstellen der Verbindung zu Ihrer DB-Instance mit Oracle SQL Developer.

  2. Legen Sie die Standardzeitzone wie folgt fest, indem Sie durch Ihre Zeitzone ersetze time_zone_name.

    BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'time_zone_name' ); END; /

Im folgenden Beispiel ändern Sie die Zeitzone in Asia/Shanghai.

Beginnen Sie, indem Sie die aktuelle Zeitzone abfragen, wie im Folgenden gezeigt.

SELECT VALUE FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE WHERE ATTRIBUTE_NAME='DEFAULT_TIMEZONE';

Die Ausgabe zeigt an, dass die aktuelle Zeitzone ETC/UTC ist.

VALUE ------- Etc/UTC

Dann stellen Sie die Zeitzone auf „Asien/Shanghai“ ein.

BEGIN DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE( attribute => 'default_timezone', value => 'Asia/Shanghai' ); END; /

Weitere Informationen zum Ändern der Systemzeitzone finden Sie unter Oracle-Zeitzone.

Deaktivieren von Oracle-Scheduler-Aufgaben im Besitz von SYS

Um einen SYS-eigene Oracle-Scheduler-Aufgabe zu deaktivieren, verwenden Sie die Prozedur rdsadmin.rdsadmin_dbms_scheduler.disable.

Diese Vorgehensweise verwendet den allgemeinen Parameter name für Oracle Scheduler-Tasks. Weitere Informationen finden Sie unter Geläufige Parameter für Oracle Scheduler-Prozeduren.

Das folgende Beispiel deaktiviert den Oracle Scheduler-Job SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.disable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /

Aktivieren von Oracle-Scheduler-Aufgaben im Besitz von SYS

Um eine SYS-eigene Oracle-Scheduler-Aufgabe zu aktivieren, verwenden Sie die Prozedur rdsadmin.rdsadmin_dbms_scheduler.enable.

Diese Vorgehensweise verwendet den allgemeinen Parameter name für Oracle Scheduler-Tasks. Weitere Informationen finden Sie unter Geläufige Parameter für Oracle Scheduler-Prozeduren.

Das folgende Beispiel aktiviert den Oracle Scheduler-Job SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.enable('SYS.CLEANUP_ONLINE_IND_BUILD'); END; /

Ändern des Wiederholungsintervalls von Oracle Scheduler für Aufgaben des Typs CALENDAR

Um das Wiederholungsintervall für die Änderung eines SYS-eigenen Oracle-Scheduler-Jobs vom Typ CALENDAR zu ändern, verwenden Sie die Vorgehensweise rdsadmin.rdsadmin_dbms_scheduler.disable.

Diese Vorgehensweise verwendet die folgenden allgemeinen Parameter für Oracle Scheduler-Tasks:

  • name

  • attribute

  • value

Weitere Informationen finden Sie unter Geläufige Parameter für Oracle Scheduler-Prozeduren.

Das folgende Beispiel ändert das Wiederholungsintervall des Oracle Scheduler-Jobs SYS.CLEANUP_ONLINE_IND_BUILD.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute( name => 'SYS.CLEANUP_ONLINE_IND_BUILD', attribute => 'repeat_interval', value => 'freq=daily;byday=FRI,SAT;byhour=20;byminute=0;bysecond=0'); END; /

Ändern des Wiederholungsintervalls von Oracle Scheduler für Aufgaben des Typs NAMED

Einige Oracle Scheduler-Jobs verwenden einen Zeitplannamen anstelle eines Intervalls. Für diese Art von Jobs müssen Sie im Master-Benutzerschema einen neuen benannten Zeitplan anlegen. Verwenden Sie dazu die standardmäßige Oracle sys.dbms_scheduler.create_schedule-Prozedur. Verwenden Sie außerdem die rdsadmin.rdsadmin_dbms_scheduler.set_attribute procedure, um dem Job den neuen benannten Zeitplan zuzuweisen.

Diese Vorgehensweise verwendet den folgenden allgemeinen Parameter für Oracle Scheduler-Tasks:

  • name

  • attribute

  • value

Weitere Informationen finden Sie unter Geläufige Parameter für Oracle Scheduler-Prozeduren.

Das folgende Beispiel ändert das Wiederholungsintervall des Oracle Scheduler-Jobs SYS.BSLN_MAINTAIN_STATS_JOB.

BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'rds_master_user.new_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=0;byminute=0;bysecond=0', end_date => NULL, comments => 'Repeats daily forever'); END; / BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_attribute ( name => 'SYS.BSLN_MAINTAIN_STATS_JOB', attribute => 'schedule_name', value => 'rds_master_user.new_schedule'); END; /

Deaktivieren von Autocommit für die Erstellung von Oracle-Scheduler-Aufgaben

Wenn DBMS_SCHEDULER.CREATE_JOB Oracle-Scheduler-Aufgaben erstellt, werden die Aufgaben sofort erstellt und es wird ein Commit für die Änderungen ausgeführt. Möglicherweise müssen Sie die Erstellung von Oracle-Scheduler-Aufgaben in die Benutzertransaktion integrieren, um Folgendes zu tun:

  • Setzen Sie die Oracle-Scheduler-Aufgabe zurück, wenn die Benutzertransaktion zurückgesetzt wird.

  • Erstellen Sie die Oracle-Scheduler-Augabe, wenn ein Commit für die Hauptbenutzertransaktion ausgeführt wird.

Sie können die Prozedur rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag verwenden, um dieses Verhalten zu aktivieren. Diese Prozedur verwendet keine Parameter. Sie können diese Prozedur in den folgenden Versionen von RDS für Oracle verwenden:

  • 21,0.0.0.ru-2022-07.rur-2022-07.r1 und höhere Versionen

  • 19,0.0.0.ru-2022-07.rur-2022-07.r1 und höhere Versionen

Im folgenden Beispiel wird Autocommit für Oracle Scheduler deaktiviert, eine Oracle-Scheduler-Aufgabe erstellt und anschließend die Transaktion zurückgesetzt. Da Autocommit deaktiviert ist, setzt die Datenbank auch die Erstellung der Oracle-Scheduler-Aufgabe zurück.

BEGIN rdsadmin.rdsadmin_dbms_scheduler.set_no_commit_flag; DBMS_SCHEDULER.CREATE_JOB(job_name => 'EMPTY_JOB', job_type => 'PLSQL_BLOCK', job_action => 'begin null; end;', auto_drop => false); ROLLBACK; END; / PL/SQL procedure successfully completed. SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='EMPTY_JOB'; no rows selected