زمانی که DBMS_SCHEDULER در اوراکل 10g ارائه شد، تنها سه نوع جاب PLSQL_BLOCK، STORED_PROCEDURE و EXECUTABLE را پشتیانی می کرد در اوراکل 11g هم تغییر قابل توجهی در این مسئله رخ نداد تا اینکه در نسخه 12c اوراکل job_typeهای جدیدی را به این مجموعه اضافه کرد تا تنظیم بعضی از جابها به شکل ساده تر و با وابستگی کمتری به محیط سیستم عامل قابل انجام باشد:
SHELL_SCRIPT – SQL_SCRIPT – BACKUP_SCRIPT
در این متن با هر کدام از این نوع جابها آشنا خواهیم شد.
BACKUP_SCRIPT
با کمک این نوع از جاب می توان عملیاتی نظیر تنظیم جاب برای بکاپ RMAN و تهیه دامپ با کمک Data Pump را بدون ایجاد فایلی در محیط سیستم عامل انجام داد. در مثال زیر، نحوه تنظیم جاب برای بکاپ RMAN توضیح داده شده است.
تنظیم جاب برای بکاپ RMAN: برای تنظیم جاب مربوط به بکاپ RMAN، ابتدا credentialای را ایجاد می کنیم که در آن پسورد کاربر سیستم عاملی oracle تنظیم شده است:
begin
dbms_credential.create_credential(credential_name => ‘OS_CREDENTIAL‘,
username => ‘oracle’,
password => ‘p’,
enabled => true,
comments => ‘password for oracle user’);
end;
/
سپس CREDENTIAL دیگری را برای تعیین پسورد کاربر sys ایجاد می کنیم:
begin
dbms_credential.create_credential(credential_name => ‘DB_CREDENTIAL‘,
username => ‘sys’,
password => ‘p’,
database_role => ‘sysdba’,
enabled => true,
comments => ‘password for sys user’);
end;
/
نهایتا با کمک دو CREDENTIAL ایجاد شده، جابی را ایجاد می کنیم که در آن، اسکریپت تهیه بکاپ RMAN به عنوان action_job تعیین شده است:
begin
dbms_scheduler.create_job(job_name => ‘RMAN_BACKUP_JOB‘,
job_type => ‘BACKUP_SCRIPT’,
job_action =>
‘connect target /
run {
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ”/12c/bkp/con_%F”;
crosscheck archivelog all;
alter system archive log current;
BACKUP as COMPRESSED BACKUPSET database format ”/12c/bkp/%U”;
alter system archive log current;
backup archivelog all not backed up 1 times;
}‘,
start_date => trunc(sysdate),
repeat_interval => ‘freq=daily;byhour=3;byminute=00;bysecond=0’,
credential_name => ‘OS_CREDENTIAL‘,
enabled => false,
auto_drop => false,
comments => ‘rman backup job’);
dbms_scheduler.set_attribute(name=>’RMAN_BACKUP_JOB‘,
attribute=>’CONNECT_CREDENTIAL_NAME‘,
value=>’DB_CREDENTIAL‘);
end;
/
در صورت اجرای این job، می توان logهای مربوط به عملیات RMAN را در ویوی ALL_SCHEDULER_JOB_RUN_DETAILS مشاهده کرد:
SQL> exec dbms_scheduler.run_job(‘RMAN_BACKUP_JOB’,use_current_session => false);
PL/SQL procedure successfully completed
SQL> select p.binary_output from ALL_SCHEDULER_JOB_RUN_DETAILS p where p.job_name=’RMAN_BACKUP_JOB’ order by p.log_id desc;
Recovery Manager: Release 12.2.0.1.0 – Production on Mon Oct 7 13:22:16 2019
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
RMAN>
connected to target database: SINK (DBID=229696930)
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/12c/bkp/con_%F’;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/12c/bkp/con_%F’;
new RMAN configuration parameters are successfully stored
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=509 device type=DISK
validation succeeded for archived log
archived log file name=/12c/home/dbs/arch1_430_985431394.dbf RECID=7 STAMP=1021029523
validation succeeded for archived log
archived log file name=/12c/home/dbs/arch1_431_985431394.dbf RECID=8 STAMP=1021029526
validation succeeded for archived log
archived log file name=/12c/home/dbs/arch1_432_985431394.dbf RECID=9 STAMP=1021029529
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/12c/base/oradata/sink/mgmt.dbf
input datafile file number=00002 name=/12c/base/oradata/sink/sysaux01.dbf
input datafile file number=00001 name=/12c/base/oradata/sink/system01.dbf
input datafile file number=00003 name=/12c/base/oradata/sink/undotbs01.dbf
input datafile file number=00007 name=/12c/base/oradata/sink/mgmt_ad4j.dbf
input datafile file number=00008 name=/12c/base/oradata/SINK/datafile/o1_mf_mtbs_gsort80c_.dbf
input datafile file number=00005 name=/12c/base/oradata/sink/mgmt_depot.dbf
piece handle=/12c/bkp/11udnicc_1_1 tag=TAG20191007T132220 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:07:06
Starting Control File and SPFILE Autobackup at 07-OCT-19
piece handle=/12c/bkp/con_c-229696930-20191007-09 comment=NONE
Finished Control File and SPFILE Autobackup at 07-OCT-19
piece handle=/12c/home/dbs/13udnipn_1_1 tag=TAG20191007T132927 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
RMAN>
Recovery Manager complete.
نکته: در صورت رخ دادن خطای ORA-27369، اسکریپت root.sh را اجرا کنید:
SQL> exec dbms_scheduler.run_job(‘RMAN_BACKUP_JOB’);
ORA-27369: job of type EXECUTABLE failed with exit code: Login executable not setuid-root
[root@ol7 ~]# /18c/home/root.sh
EXTERNAL_SCRIPT
همانطور که می دانید که با کمک جابهای از نوع external می توانستیم اسکریپتی که در سیستم عامل موجود است را در محیط دیتابیس صدا زده و اجرا کنیم. نوع دیگری از جاب که در اوراکل 12c اضافه شد، EXTERNAL_SCRIPT می باشد که می توان با کمک ان دستوراتی را در سطح سیستم عامل اجرا نمود با این تفاوت که متن اسکریپت و دستورات مورد نظر را می توان در زمان تعریف جاب و در قسمت job_action قرار داد.
مثال: در تکه کد زیر، با ایجاد جابی با نام MY_EXTERNAL_JOB، دستوراتی چون touch، ls و df را در محیط سیستم عامل اجرا می کنیم.
BEGIN
dbms_credential.create_credential(credential_name => ‘OS_CREDENTIAL‘,
username => ‘oracle’,
password => ‘p’,
enabled => true,
comments => ‘oracle password’);
DBMS_SCHEDULER.create_job(
job_name => ‘MY_EXTERNAL_JOB’,
job_type => ‘EXTERNAL_SCRIPT’,
job_action => ‘
#!/bin/bash
echo my name is usef>>myfile.txt
ls -l /home/oracle/myfile.txt
rm -rf /home/oracle/myfile.txt
df -h‘,
credential_name => ‘OS_CREDENTIAL‘,
enabled => TRUE
);
END;
با اجرای جاب MY_EXTERNAL_JOB، لاگ ثبت شده برای این جاب را می توان در ویوی ALL_SCHEDULER_JOB_RUN_DETAILS مشاهده کرد:
SQL> select output from ALL_SCHEDULER_JOB_RUN_DETAILS where job_name=’MY_EXTERNAL_JOB’;
-rw-rw-rw-. 1 oracle oinstall 0 Oct 7 13:45 /home/oracle/myfile.txt
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 181G 151G 21G 88% /
tmpfs 7.8G 72K 7.8G 1% /dev/shm
/dev/sda1 488M 438M 15M 97% /boot
SQL_SCRIPT
با کمک این نوع از جاب، می توان دستوراتی را در محیط sqlplus اجرا کرد:
BEGIN
dbms_credential.create_credential(credential_name => ‘OS_CREDENTIAL‘,
username => ‘oracle’,
password => ‘p’,
enabled => true,
comments => ‘oracle pass’);
DBMS_SCHEDULER.create_job(
job_name => ‘MY_SQL_JOB’,
job_type => ‘SQL_SCRIPT‘,
job_action => ‘
conn sys/poojhgyvvtO_8 AS SYSDBA
desc mytbl;
SPOOL /home/oracle/datafile.txt;
select file#,ts#,status from v$datafile;
SPOOL OFF;‘,
credential_name => ‘OS_CREDENTIAL‘,
enabled => TRUE
);
END;
/
با اجرای این جاب، خروجی به صورت زیر خواهد بود:
SQL> select p.binary_output from ALL_SCHEDULER_JOB_RUN_DETAILS p where p.job_name=’MY_SQL_JOB’ order by p.log_id desc;
SQL*Plus: Release 12.2.0.1.0 Production on Mon Oct 7 14:52:58 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
SQL> SQL> Connected.
SQL> Name Null? Type
————- ——– ———–
ID NUMBER
NAME VARCHAR2(10)
SQL> SQL>
FILE# TS# STATUS
———- ———- ———————
1 0 SYSTEM
2 1 ONLINE
3 2 ONLINE
5 5 ONLINE
6 6 ONLINE
7 7 ONLINE
8 14 ONLINE
7 rows selected.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production
باسلام
لطفا مطلبی در باره huge page نحوه تنظیم ان قرار دهید