ورود

View Full Version : خواهش میکنم کمکم کنید ( گرفتن و ارسال backup به ایمیل)



parsiansoft
جمعه 10 شهریور 1391, 10:20 صبح
سلام دوستان من دنبال Tsql میگردم که بتونه تو اوراکل از دیتابیس یه بکاپ بگیره و به یه آدرس ایمیل ارسال کنه، خواهش میکنم کمکم کنید که چطوری میتونم این کار رو بکنم /
با تشکر

oracledba
جمعه 10 شهریور 1391, 15:36 عصر
Hello,

For taking a backup, create a file (.bat in windows or .sh in linux) and paste the following lines into it, then save

rman target / << !
BACKUP INCREMENTAL LEVEL 1 database spfile plus archivelog;
exit;

for sending it via mail, you can use the following link to create a procedure

http://www.orafaq.com/wiki/Send_mail_from_PL/SQL

and then add the following lines to the previous files:

sqlplus / as sysdba << !
exec procedure_name (...... );
exit;

please not that, for executing the file you must be connected with Oracle Owner User (administrator), otherwise you have to specify the user name and password while connecting to db.

Good Luck

parsiansoft
جمعه 10 شهریور 1391, 23:19 عصر
میشه راهنمایم کنید که چطور میتونم کدی بنویسم که مثلاً result یه select رو برام ایمیل کنه ؟
بعدا اگه پروسیجر باید بنویسم ؟
اگه جواب بله هست ، کد اجرا کردن پروسیجر چی هست؟
در مورد نحوه ارسال ایمیل میشه کمکم کنید باید سرور تنظیم خاصی شده باشه ؟
تو اینجا آدرس IP چی هست ؟
و sender چی میشه ؟
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''127.0.0.1''';
UTL_MAIL.send(sender => 'me@address.com',
recipients => 'you@address.com',
subject => 'Test Mail',
message => 'Hello World',
mime_type => 'text; charset=us-ascii');
END;
/
ممنون

oracledba
شنبه 11 شهریور 1391, 00:10 صبح
سلام
خروجی backup شما چند تا فایل هست که میتونید از پروسیجر زیر برای ایمیل کردن آن استفاده کنید:


Create or replace procedure proc1
as
v_From VARCHAR2(80) := 'oracle@mycompany.com';
v_Recipient VARCHAR2(80) := 'test@mycompany.com';
v_Subject VARCHAR2(80) := 'test subject';
v_Mail_Host VARCHAR2(30) := 'mail.mycompany.com';
v_Mail_Conn utl_smtp.Connection;
crlf VARCHAR2(2) := chr(13)||chr(10);
BEGIN
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);

utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);

utl_smtp.Mail(v_Mail_Conn, v_From);

utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);

utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: ' || v_Recipient || crlf ||

'MIME-Version: 1.0'|| crlf || -- Use MIME mail standard
'Content-Type: multipart/mixed;'|| crlf ||
' boundary="-----SECBOUND"'|| crlf ||
crlf ||

'-------SECBOUND'|| crlf ||
'Content-Type: text/plain;'|| crlf ||
'Content-Transfer_Encoding: 7bit'|| crlf ||
crlf ||
'some message text'|| crlf || -- Message body
'more message text'|| crlf ||
crlf ||

'-------SECBOUND'|| crlf ||
'Content-Type: text/plain;'|| crlf ||
' name="excel.csv"'|| crlf ||
'Content-Transfer_Encoding: 8bit'|| crlf ||
'Content-Disposition: attachment;'|| crlf ||
' filename="excel.csv"'|| crlf ||
crlf ||
'CSV,file,attachement'|| crlf || -- Content of attachment
crlf ||

'-------SECBOUND--' -- End MIME mail
);

utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail: '||sqlerrm);
END;
/

سرورتون هم تنظیم خاصی نمی خواند . در پروسیجر فوق، سرور فرستنده (from) همون سرور اوراکل شماست. برای اجرای پروسیجر هم از دستور زیر استفاده میشه:

exec procname(....)

در ضمن برای ارسال خروجی select میتونید از export استفاده کنید.

parsiansoft
شنبه 11 شهریور 1391, 18:35 عصر
سلام
من این پروسیجر رو ساختم
ولی وقتی میخوام اجراش کنم
این پیغام رو میده
ORA-00900: invalid SQL statement
کدی که برا اجرا مینویستم هم
exec proc1();
و ....
اما اجرا نمیشه
خواهش میکنم کمکم کنید .

oracledba
یک شنبه 12 شهریور 1391, 10:31 صبح
سلام
من این پروسیجر رو ساختم
ولی وقتی میخوام اجراش کنم
این پیغام رو میده
ORA-00900: invalid SQL statement
کدی که برا اجرا مینویستم هم
exec proc1();
و ....
اما اجرا نمیشه
خواهش میکنم کمکم کنید .

سلام
از لینک زیر برای ایجاد proc استفاده کنید:
http://www.techonthenet.com/oracle/procedures.php
واسه اجراش هم باید از دستوراتی مانند دستورات زیر استفاده کنید:
exec proc1;

exec proc2(10,20);

begin
proc1;
end;
/

http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_app_dbms_aw026.htm