PDA

View Full Version : مجوز diskadmin برای بک آپ روی سرور



fereshte22
جمعه 03 اسفند 1386, 22:11 عصر
سلام
من میخواستم که از دیتابیس خودم که روی سرور قرار دارد بک اپ بگیرم تاپیک های زیادی را دریاین مورد خوندم که در یکی از اونها آقای ثباتی به نقل از book online فرموده بودند که فقط یوزرهای با مجوز sysadmin و diskadmin اجازه این کار را دارند
من با مسئول هاست در این مورد صحبت کردم که گفتند diskadmin اختیارات زیادی دارد و نمیتونیم این مجوز را به شما بدهیم(sysadmin که دیگه اصلا امکانش نیست)
ایا واقعا همین طور است؟
بدون این مجوز راهی برای بک اپ گیری (از طریق کد نویسی )نیست؟
در ضمن کنترل پنل من plesk است

AminSobati
شنبه 04 اسفند 1386, 21:45 عصر
مطمئن هستین که من گفتم برای Backup باید sysadmin یا diskadmin باشین؟!
Backup گرفتن نیاز به عضویت در db_BackupOperator داره که از Roleهای دیتابیس هست و با این دستور میتونین:



BACKUP DATABASE MyDB TO DISK='C:\MyBackups\MyDB.BAK'

ولی مهم اینجاست که اجازه نوشتن در فولدر MyBackups وجود داشته باشه.

fereshte22
یک شنبه 05 اسفند 1386, 09:11 صبح
اقای ثباتی عزیز منظور من تاپیک زیر بود
http://barnamenevis.org/forum/showthread.php?t=44837

که البته منظور شما اجرای sp_addumpdevice بود

ایا برای بک اپ لازم نیست که این procedure را اجرا کنیم؟
در ضمن کدی که شما در پست بالا قرار دادید دقیقا روی چه مسیری بک آپ میگیرد؟(روی سیستم)
در مسیر C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\MyBackups یا C:\MyBackups
چون من هر کدوم را که امتحان میکنم خطای زیر را میگیرد


Cannot open backup device 'c:\MyBackups\MyDB2.BAK'. Operating system error 3(The system cannot find the path specified.).


در حالی که من در هر دو مسیر پوشه mybackups را ایجاد کرده و خاصیت archive را در اون فعال کردم

AminSobati
یک شنبه 05 اسفند 1386, 10:25 صبح
- اجرای sp_addumpdevice برای Backup گیری الزامی نیست، میتونین مستقیم آدرس دیسک رو بدین.
- زمانی که دستور Backup رو اجرا میکنین، مسیر خود سرور استفاده میشه نه مسیر Local کامپیوتر شما. به عبارت دیگه، نمیتونین Backup رو با این روش از Host به کامپیوتر خودتون منتقل کنین. بلکه Admin باید فولدری در اختیار شما قرار بده که بعد از Backup فرضا با کمک FTP فایل حاصل رو کپی کنین

fereshte22
یک شنبه 05 اسفند 1386, 11:03 صبح
آقای ثباتی از راهنمایتون ممنون هستم
من کد زیر را امتحان کردم



BACKUPDATABASE namedatabase TODISK='\\www.rahasoft.com\backup\MyDB.BAK'

و خطای زیر را داد


Cannot open backup device '\\www.rahasoft.com\backup\MyDB.BAK'. Operating system error 1231(The network location cannot be reached. For information about network troubleshooting, see Windows Help.).


من در httpdocs یه پوشه به نام backup درست کردم



بلکه Admin باید فولدری در اختیار شما قرار بده که بعد از Backup فرضا با کمک FTP فایل حاصل رو کپی کنین

یعنی مسئول هاست باید این پوشه را ایجاد کند؟؟
ممنون

Behrouz_Rad
یک شنبه 05 اسفند 1386, 11:43 صبح
fereshte22@
کد برادر ثباتی رو به شکل ذیل تغییر بده:


CREATE PROCEDURE spBackupDB
(
@strPath nvarchar(255)
)
AS
BACKUP DATABASE MyDB TO DISK= @strPath

در ASP.NET، باید از Server.MapPath استفاده کنی:


myCommand.Parameters.Add("@strPath", Server.MapPath(".") & "\myBackupFolder\MyDB.BAK", NVarChar, 255)


موفق باشید.

AminSobati
یک شنبه 05 اسفند 1386, 11:50 صبح
آدرسی که مورد نظرتون هست باید حتما قابل Browse کردن باشه. مطمئن هستین که این خاصیت رو داره؟
ضمنا فولدر رو دستور Backup نمیتونه ایجاد کنه، خود Admin باید بسازه

fereshte22
دوشنبه 06 اسفند 1386, 10:39 صبح
اقای راد کدی که شما گذاشتید از دیتابیس روی سرور روی کامپیوتر خودمون هم بک اپ میگیرد.درسته؟
در ضمن من وقتی برنامه را اجرا کردم همون موقع که روی کلید بک اپ کلیک میکنم خطای زیر در یک کادر نشون داده میشود


conversion from string "c:\inetpub\vhosts\rahasoft.\h to type "integer" is not valid

Behrouz_Rad
دوشنبه 06 اسفند 1386, 10:53 صبح
اقای راد کدی که شما گذاشتید از دیتابیس روی سرور روی کامپیوتر خودمون هم بک اپ میگیرد.درسته؟

روی کامپیوتر خودتون نه! فایل Backup در پوشه ی (در کد من در myBackupFolder) که در ریشه ی اصلی سایتت قبلا ایجادش کردی قرار می گیره.

متن کامل کد Backup ات رو قرار بده.

fereshte22
دوشنبه 06 اسفند 1386, 13:45 عصر
Using con AsNew SqlConnection(ConfigurationManager.ConnectionStrin gs("ssgshopConnectionString").ConnectionString)
Dim cmd AsNew SqlCommand("spBackupDBnew", con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@strPath", Server.MapPath(".") & "\myBackupFolder\MyDB.BAK", "NVarChar", 255)
Try
con.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
Finally
con.Close()
EndTry
EndUsing


من پوشه مورد نظر را هم در روت سایت قرا ردادم

Behrouz_Rad
دوشنبه 06 اسفند 1386, 13:52 عصر
NVarChar نوع شمارشی ثابت از SqlDbType هست. نیاز به " نداره.
ex رو از نوع SqlException در نظر بگیر...
روی ExecuteNonQuery با خطا مواجه میشی؟ به نظر مشکل دیگه ای به جز نوع ثابت NVarChar نباید وجود داشته باشه.

fereshte22
دوشنبه 06 اسفند 1386, 15:31 عصر
آقای راد من به این شکل استفاده کردم


cmd.Parameters.Add("@strPath", Server.MapPath(".") & "\myBackupFolder\MyDB.BAK", SqlDbType.NVarChar, 255)


و button را که از داخل updatepanel برداشتم ولی حالا خطای زیر را از کد بالا میدهد


Input string was not in a correct format.


در ضمن من برنامه ام در روت سایت نیست بلکه در یه پوشه مجازی به نام administration است وپوشه myBackupFolder را هم در روت و هم در پوشه ساختم و از


\administration\myBackupFolder\MyDB.BAK

استفاده کردم که باز همون خطا را میدهد

Behrouz_Rad
دوشنبه 06 اسفند 1386, 15:44 عصر
در حالت لوکال هم همین خطا رو دریافت می کنی؟

fereshte22
دوشنبه 06 اسفند 1386, 21:13 عصر
در حالت لوکال هم همین خطا رو دریافت می کنی؟
بله استاد
دقیقا همین خطا را دریافت میکنم

Behrouz_Rad
دوشنبه 06 اسفند 1386, 21:24 عصر
چیزی به ذهنم نمیرسه.
یکی از برنامه های من دقیقا به همین شکل درست عمل می کنه.

fereshte22
دوشنبه 06 اسفند 1386, 23:01 عصر
آقای راد خیلی به شما زحمت دادم
شرمند
ایا امکان دارد که نمونه برنامه خودتون را اینجا قرار دهید
من این کد را روی دو تاسیستم و سه تا برنامه مختلف چک کردم ولی باز همین خطا را میگیرد

Behrouz_Rad
سه شنبه 07 اسفند 1386, 09:17 صبح
نمونه ی برنامه نیاز نیست.
دقیقا همون کدها و کارهایی که بهت گفتم رو خودم هم انجام دادم و جواب گرفتم... :)

fereshte22
پنج شنبه 09 اسفند 1386, 23:06 عصر
سلام
آقای راد من به جای کد قبلی یه تغییر کوچیک دادم و از کد زیر استفاده کردم


cmd.Parameters.Add("@strPath", SqlDbType.NVarChar, 255, Server.MapPath(".") & "\myBackupFolder\ssg.bak"


که این بار از این خط خطایی نگرفت و لی روی خط زیر



cmd.ExecuteNonQuery()

خطای زیر را میگیرد


Procedure or Function 'spbackupdb' expects parameter '@strPath', which was not supplied.

Behrouz_Rad
جمعه 10 اسفند 1386, 00:00 صبح
حالا فهمیدم!
اشتباه اینجا بود که هیچ Overload ای در سازنده ی SqlParameter وجود نداره که مقدار پارامتر رو بپذیره!
به شکل ذیل اصلاح کن:


Dim Param As SqlParameter
Param = Cmd.Parameters.Add(""@strPath"", SqlDbType.NVarChar, 255)
Param.Value = Server.MapPath(".") & "\myBackupFolder\ssg.bak"

موفق باشید.