# پایگاه‌های داده > SQL Server > مدیریت دیتابیس (Database Administration) > مسائل مرتبط با نصب و راه اندازی >  مشکل read only شدن پایگاه

## farzadkamali

با سلام
بعد از نصب  sql express 2008 r2 و اتچ پایگاه ، یه مشکل پیش میاد که پایگاه  read only میشه و نمیشه رکورد ثبت کرد.
روی ویندوز 8.1 که بلااستثناء resd only میشه و روی 7 و xp هم گاهی اوقات میشه و گاهی نمیشه.
تمامی تالارها و فروم ها رو هم گشتم کد زیر رو پیدا کردم که روی express 2008 r2 جواب نمیده و ارور میده.

ALTER DATABASE db1 SET READ_WRITE WITH NO_WAIT'

حتی کد زیر رو هم تست کردم

 Query.SQL.Text:='ALTER DATABASE db1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE'; 
 Query.ExecSQL;
 Query.SQL.Text:='ALTER DATABASE db1 SET READ_WRITE';
 Query.ExecSQL;
 Query.SQL.Text:='ALTER DATABASE db1 SET MULTI_USER';
 Query.ExecSQL;


 روی سیستم خودم که sql enterprise r2 هست اروری نمیده و ظاهرا با موفقیت انجام میشه اما روی express r2 جواب نمیده.
ممنون میشم دوستان راهنمایی کنند.
به هرجا زدم به در بسته خورم

----------


## pbm_soy

فایل دیتابیس را در کدام درایو قرارذمیدهید؟
در ویندوزهای ۷ و ۸ معمولا درایو c خیلی چفت بست شده است برای موارد امنیتی 
شما فقط از فولدرهای خاصی برای نوشتن و خوا‌ندن میتوانید استفاده کنید ویا اینکه دیتابیس را در درایوهای دیگر قرار بدهید
حتی المکان اگر میخواهید بدون دردسر باشید از درایوهایی با فرمت fat , fat32 استفاده کنید ویا اگر از درایو ntfs استفاده میکنید permissionهای فولدر موردنظر را درست تنظیم کنید
فولدرهای مربوط به کاربر معمولا دسترسی فول به خود آن کاربر میدهند

----------


## farzadkamali

> فایل دیتابیس را در کدام درایو قرارذمیدهید؟
> در ویندوزهای ۷ و ۸ معمولا درایو c خیلی چفت بست شده است برای موارد امنیتی 
> شما فقط از فولدرهای خاصی برای نوشتن و خوا‌ندن میتوانید استفاده کنید ویا اینکه دیتابیس را در درایوهای دیگر قرار بدهید
> حتی المکان اگر میخواهید بدون دردسر باشید از درایوهایی با فرمت fat , fat32 استفاده کنید ویا اگر از درایو ntfs استفاده میکنید permissionهای فولدر موردنظر را درست تنظیم کنید
> فولدرهای مربوط به کاربر معمولا دسترسی فول به خود آن کاربر میدهند


توی درایو c قرار میدم و کنار محل نصب نرم افزار
درسته. فولدرهای توی درایو c همگی read only هستند.
جالب اینجاست که تمامی پوشه ها توی تمامی درایو های من read only هست و تحت هیچ شرایط هم از حالت read only خارج نمیشه.
با این حال من نرم افزار رو روی درایو d نصب کردم و مشکل حل شد در حالی که بازم پوشه هاش read only بودن. بنابراین فکر نکنم ربطی به این موضوع داشته باشه.

----------


## pbm_soy

Read only بودن فولدرها را از طریق proprties آن نگاه میکنید؟
منظور من permission یا همون خصیصه های ntfs است!
ویندوز برای کنترل دسترسی فولدر را با یک تیک readonly نمیکند از طریق امکانات ntfs اینکار را انجام میدهد در اینصورت میتوان یک یا چند کاربر و یا یک گروه کاربری را برای کار بایک فولدر دسترسی داد و همینطور برای هرکدام خصیصه هایی مانند خواندن و نوشتن و ایجاد فایل و ویرایش و حذف و اجرا و غیره را به آنها داد!
برای دیدن این موارد در پنجره propertis یک فولدر تب security را باز کنید اگر این تب وجود ندارد از folder options  تب view گزینه simple file sharing را غیر فعال کنید در ویندوز ۷ هم به همین ترتیب است

----------


## farzadkamali

> Read only بودن فولدرها را از طریق proprties آن نگاه میکنید؟
> منظور من permission یا همون خصیصه های ntfs است!
> ویندوز برای کنترل دسترسی فولدر را با یک تیک readonly نمیکند از طریق امکانات ntfs اینکار را انجام میدهد در اینصورت میتوان یک یا چند کاربر و یا یک گروه کاربری را برای کار بایک فولدر دسترسی داد و همینطور برای هرکدام خصیصه هایی مانند خواندن و نوشتن و ایجاد فایل و ویرایش و حذف و اجرا و غیره را به آنها داد!
> برای دیدن این موارد در پنجره propertis یک فولدر تب security را باز کنید اگر این تب وجود ندارد از folder options  تب view گزینه simple file sharing را غیر فعال کنید در ویندوز ۷ هم به همین ترتیب است


دوست عزیز این کارهارو هم انجام دادم اما بی نتیجه بوده.

----------


## pbm_soy

در کجا؟ دقیقا چه کاری را انجام دادید؟!

----------


## farzadkamali

> در کجا؟ دقیقا چه کاری را انجام دادید؟!


سربرگ security و قسمت edit حق دسترسی ها رو full control کردم.
همینطور سربرگ security و قسمت permisions for everyone و قسمت advanced رو نیز تنظیم کردم و دسترسی full دادم. اما بی فایده بود.

----------


## محمد آشتیانی

سلام
شما در برگه Edit ، دکمه Add رو بزنید و یوزر Everyone رو اضافه کنید با دسترسی کامل (Full Control) مشکل حل میشه.
ضمنا برای اطمینان Attribute های فایل دیتابیستون رو هم چک کنید تا Read Onlyنباشه.


موفق باشید.

----------


## farzadkamali

> سلام
> شما در برگه Edit ، دکمه Add رو بزنید و یوزر Everyone رو اضافه کنید با دسترسی کامل (Full Control) مشکل حل میشه.
> ضمنا برای اطمینان Attribute های فایل دیتابیستون رو هم چک کنید تا Read Onlyنباشه.
> 
> 
> موفق باشید.


مشکل حل نشد.
نهایتا یه بک آپ خام از یه سیستمی که read only نمیشد برداشتم و از خود برنامم restore کردم توی سیستمی که rad only مشه. فعلا که مشکل حل شد. ولی دلیلش رو نفهمیدم و اینکه چه طوری اصولی حل میشه.
در نهایت ممنون از دوستان بابت راهنمایی هاشون

----------


## pbm_soy

آیا تنظیماتی که انجام میدادید اعمال میشد؟ یعنی وقتی آن . پنجره رادوباره باز میکردید  مقادیر ثبت شده بودند؟
شاید ویروسی ویا بدافزاری در سیستم بوده!
در ضمن پس تنظیمات چطوری تست میکردی؟ ویا اینک. تنظیمات را روی چه فولدری سعی کردی ست کنی؟ 
نسخه ویندوز چند است؟
با چه username وارد سیستم میشدید واینکارها را انجام میدادید؟

----------


## farzadkamali

> آیا تنظیماتی که انجام میدادید اعمال میشد؟ یعنی وقتی آن . پنجره رادوباره باز میکردید  مقادیر ثبت شده بودند؟
> شاید ویروسی ویا بدافزاری در سیستم بوده!
> در ضمن پس تنظیمات چطوری تست میکردی؟ ویا اینک. تنظیمات را روی چه فولدری سعی کردی ست کنی؟ 
> نسخه ویندوز چند است؟
> با چه username وارد سیستم میشدید واینکارها را انجام میدادید؟


بله تنظیمات انجام میشد.
فکر نمیکنم ویروس باشه چون روی چندین سیستم امتحان کردم و برخی از مشتری ها هم همین مشکل رو داشتن. در ضمن بعضی موقع ها هم read only نمیشه.
اغلب روی ویندوز 8.1 این مشکل هست ولی گاها روی ویندوز 7 هم پیش میاد.
با یوزرنیم admin.
فکر کنم هنگام اتچ پایگاه یه بلایی سرش میاد چون پایگاه رو اتوماتیک و با دستورات sql اتچ میکنم. یه برنامه نوشتم که با استفاده از sp به نام attach_db که پیش فرض در master هست و دوتا پارامتری که بهش میدم پایگاه رو اتچ میکنم.
از طرفی دیگه تو installshield هم یه اسکریپت زدم که بعد از نصب اتوماتیک sql express 2008 r2 میاد اتوماتیک پایگاه رو اتچ میکنه.
این اسکریپت هست :
use [master]
GO 
 
CREATE DATABASE [db1] ON 
( FILENAME = N'%INSTALLDIR%\Data\db1.mdf' ),
( FILENAME = N'%INSTALLDIR%\Data\db1_log.ldf' )
 FOR ATTACH
GO       


 در هر حال من با روش ماسمالیزیشن  :قهقهه:  مشکلم رو حل کردم. توی پست قبلی گفتم که یه بک آپ از روی یه سیستم دیگه که read only نیست گرفتم و توی سیستم restor کردم مشکل حل شد.
حالا اومدم اون بک آپ رو توی ستاپ installshield قرار دادم که کنار برنامه کپی بشه و بعد از نصب sql وبرنامه و اتچ پایگاه ، با یه اسکریپت restore ، بک آپ رو ریستور کردم. مشکل حل شد.
اینو گفتم تا اگر کسی به این مشکلات برخورد کرد و با روش های گفته شده مشکلش حل نشد لااقل از این روش استفاده کنه.
در ضمن توی سایت مایکروسافت و دیگر سایت های انگلیسی یه سری روش ها برای مشکل (read only شدن فایل ها و فولدر ها در ویندوز 8.1) گفتن که من همه رو رفتم و فایده نداشت.
https://support.microsoft.com/en-us/kb/256614
و 
http://superuser.com/questions/86612...er-windows-8-1
و
http://superuser.com/questions/84614...er-windows-8-1
و...

----------


## mary70

اینطوری که برای کاربری که خودش نرم افزار نصب کنه خیلی مشکله!
یه راهی بگیداین مشکل حل بشهUntitled2.jpg

----------


## farzadkamali

> اینطوری که برای کاربری که خودش نرم افزار نصب کنه خیلی مشکله!
> یه راهی بگیداین مشکل حل بشهUntitled2.jpg


دوست عزیز مشکل شما این هست که دسترسی admin به فایل ندارید. به احتمال خیلی خیلی زیاد مشکلتون با تنظیم permision ها حل میشه. روی پایگاه کلیک راست کنید و طبق مطالب گفته شده در پست های قبل عمل کنید.
اما مشکل read only شدن پایگاه رو من فقط با این روش تونستم حل کنم. دوستان اگر راه بهتری دارن خوشحال میشم ارائه بدن.

----------


## pbm_soy

> بله تنظیمات انجام میشد.
> فکر نمیکنم ویروس باشه چون روی چندین سیستم امتحان کردم و برخی از مشتری ها هم همین مشکل رو داشتن. در ضمن بعضی موقع ها هم read only نمیشه.
> اغلب روی ویندوز 8.1 این مشکل هست ولی گاها روی ویندوز 7 هم پیش میاد.
> با یوزرنیم admin.
> فکر کنم هنگام اتچ پایگاه یه بلایی سرش میاد چون پایگاه رو اتوماتیک و با دستورات sql اتچ میکنم. یه برنامه نوشتم که با استفاده از sp به نام attach_db که پیش فرض در master هست و دوتا پارامتری که بهش میدم پایگاه رو اتچ میکنم.
> از طرفی دیگه تو installshield هم یه اسکریپت زدم که بعد از نصب اتوماتیک sql express 2008 r2 میاد اتوماتیک پایگاه رو اتچ میکنه.
> این اسکریپت هست :
> use [master]
> GO 
> ...


دوست عزیز شما در پست دوم یا سوم نوشتید که با کپی کردن دیتابیس در درایو d: مشکل حل شد!
البته این موضوع منطقی است چون درایوهای دیگر غیر از c: همگی آزادی بیشتری دارند نسبت به c: 
و در این پست هم گفتید که مشکل پابرجاست و readonly شدن بخاطر کارهایی است که در sql server انجام میدهید!
برای همین بهتر بود سرچتون را براساس readonly شدن دیتابیس توسط sql server انجام میدادید!

خوب در هرصورت میتوانید properties دیتابیس را بیاورید با کلیک راست کردن بروی آن و سپس از بخش options گزینه database readonly را به false ست کنید و ذخیره کنید

----------


## pbm_soy

برای اطلاعات بیشتر بد نیست لینکهای زبر را مطالعه کنید

http://stackoverflow.com/questions/6...d-is-read-only

http://stackoverflow.com/questions/6...d-is-read-only

http://blog.sqlauthority.com/2011/04...-to-readwrite/

----------


## mary70

دیتابیسم اصلا read only نیست وحتی اجازه copy و paste در درایو های دیگه ندارم در sql جایی نیست که از administrator اجازه باز کردن و کپی وپیست برا فایلmdf. بگیرم ؟؟

----------


## farzadkamali

> دوست عزیز شما در پست دوم یا سوم نوشتید که با کپی کردن دیتابیس در درایو d: مشکل حل شد!
> البته این موضوع منطقی است چون درایوهای دیگر غیر از c: همگی آزادی بیشتری دارند نسبت به c: 
> و در این پست هم گفتید که مشکل پابرجاست و readonly شدن بخاطر کارهایی است که در sql server انجام میدهید!
> برای همین بهتر بود سرچتون را براساس readonly شدن دیتابیس توسط sql server انجام میدادید!
> 
> خوب در هرصورت میتوانید properties دیتابیس را بیاورید با کلیک راست کردن  بروی آن و سپس از بخش options گزینه database readonly را به false ست کنید  و ذخیره کنید


بله دوست عزیز. بعدش گفتم که به صورت رندومه. چندین بار دیگه که تست کردم دیدم به صورت رندومه و گاهی اوقات میشه و گاهی نمیشه.
دوست  عزیز من به خاطر این مشکل تمام اینترنت و صفحات انگلیسی و فارسی رو زیر و  رو کردم و نتیجه نگرفتم.




> و در این پست هم گفتید که مشکل پابرجاست و readonly شدن بخاطر کارهایی است که در sql server انجام میدهید!


در ضمن گفتم که احتمال میدم که این طور باشه.
دوست عزیز من تحت هیچ شرایطی نتونستم دلیل منطقی برای این مشکل پیدا کنم و اینا همه احتمالاته. همه رو گفتم شاید یکی بتونه دلیل منطقی پیدا کنه و مشکل رو حل کنه

----------


## abdullah20

همه این کار ها باید هنگام ساخت ستاپ انجام بگیره تا اگر کاربر حتی نرم افزار را در درایو c نصب کرد دیتابیس readonly نشه

----------


## farzadkamali

> همه این کار ها باید هنگام ساخت ستاپ انجام بگیره تا اگر کاربر حتی نرم افزار را در درایو c نصب کرد دیتابیس readonly نشه


فعلا که میشه. الزامی هم نداره که پایگاه توی c باشه یانه. به صورت رندومه. بعضی مواقع پایگاه رو روی دسکتاپ یا درایو های دیگه میریزی مشکل حل مشه و بعضی مواقع نمیشه. 
اگه منظورتون از  ((همه این کارها)) نصب sql و اتچ پایگاه و... هست که خب همه کارها از طریق ستاپ نصب میشه دیگه.

----------


## omidaak

منم به این مشکل برخورد کردم. خیلی کلنجار رفتم.
تا اینکه تصمیم گرفتم فایل های دیتا بیس رو هنگام نصب نرم افزار تو پوشه AppData  کپی کنم که خدارو شکر مشکل حل شد. شما هم این روش رو تست کنید ایشالا که جواب میگیرید.
آخه معمولا فایل هایی که تو پوشه Program file  هست read only  میشن.
C:\Users\PC-NAME\AppData\Roaming
نسخه sqlserver  من sqlserver express loclaldb 2012 - 2014 بود و با advanced installer  ستاپ گرفتم. فایل های دیتا بیس رو هم تو پوشه ApplicationData تو Advanced installer  تنظیم کردم..

----------


## yosef_ghobadi

بنده با نرم افزار Advance Installer ستاپ درست می کنم و یه گزینه ای داره به اسم Run As Administrator که اگه تیکشو بزنی نرم افزار رو با یوزر ادمین اجرا میکنه و این مشکلات پیش نمیاد

----------

