Arşiv Şubat 2017

Exchange Server 2010 SP1 Mailbox Export Islemi

Merhabalar; Bu yazımda Exchange Server 2010 SP1 üzerinde mailbox’a sahip olan bir kullanıcının tüm maillerini nasıl dışarı .pst olarak aktarabileceğimize değineceğim. Öyle ki bazı durumlarda bu işlem çok gerekli olabiliyor örneğin, bir çalışanın işten ayrılması sonucu mailbox ını saklamak, bir yerlerde arşivlemek isteyebilirsiniz, bugibi durumlarda aşağıda anlatacağım gibi pst dosyasını elde edebilirsiniz.

Exchange Server 2010 Management Shell i run as administrator olarak açıyoruz.

Gelen ekranda Exchange kütüphanesinin içe aktarılabilmesi için buradaki

Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010 komutu çalıştırıyoruz.

Bu işlemi yapabilmek adına Administrator kullanıcısına Mailbox import export yetkisi vermek gerekiyor.

New-ManagementRoleAssignment -Role “Mailbox Import Export” -User Administrator bu komutu çalıştırarak gerekli yetkiyi veriyoruz.

Mailbox I dışarı aktarabilmek için c dizini altında Export adında bir klasör oluşturup Exchange Trusted Subsystem e full yetki veriyorum ve işlem bitene kadar paylaşıma açıyorum.

Bu işlemden sonra kullanıcı adı deren olan personelin mailbox’ını dışarı aktarmak için gerekli komutu çalıştırıyoruz

New-MailboxExportRequest -Mailbox deren -FilePath \EXCHANGESERVERADIExportdavuteren.pst

Yukarıdaki kod satırında da mailbox adı deren olan ve filepath yazan yerde bizim paylaşım dosyamızın olduğunu doğrulayarak gerekli export işlemini başlatıyorum.

 

Yapılan işlemi Get-MailboxExportRequest bu komutla hangi aşamada olduğunu gözlemleyebilirsiniz.

Yapılan işlemi Get-MailboxExportRequest -Name MailboxExport | fl bu komutla daha detaylı görebilirsiniz. Get-MailboxExportRequest | Get-MailboxExportRequestStatistics bu komutda yapılan isteği görüntülemenin bir diğer yolu.

Işlem tamamlandığında yani Status -> Completed yazısını gördüğünüzde. Export işlemi için yapılan istek tamamlanmış demektir. Pst dosyanızı control ettikten sonra yukarıda ki komutla yaptığınız export isteğini silebilirsiniz.

Remove-MailboxExportRequest komutu ile yazının başındaki talebi iptal ediyoruz.

Bu komut sonrası Identity uyarısı alıyorsanız burada yukarıdaki örneğe göre derenmailboxexport yazmanız gerekiyor.

Yani kullanıcı adımailbox isteğinin adı şeklinde. Son olarak Get-MailboxExportRequest komutunu çalıştırdığınızda herhangi bir request in olmadığını göreceksiniz.

Bu komutla dışarı aktarılma işlemi tamamlanmış olan tüm mailboxları görebilirsiniz.

Get-MailboxExportRequest | where {$_.status -eq “Completed”}

Aşağıdaki komutla tüm tamamlanmış istekleri silebilirsiniz.

Get-MailboxExportRequest | where {$_.status -eq “Completed”} | Remove-MailboxExportRequest

Bir sonraki yazımda görüşmek ümidiyle.

Referans: http://exchangeserverpro.com/export-mailboxes-exchange-server-2010-sp1/

Exchange Server 2010 0x80004005, ec=528 database unmount hatasi

Exchange 2010 Sunucunuz, yanlış kapatılma veya yaptığınız bir işlem sonucu(disk işlemleri, yanlışlıkla log silme) gibi bazı sebeplerle databaselerinizden bir veya birkaçı unmount duruma düşebilir. Bunun sebebi genellikle log dosyalarından bir ya da bir kaçının kaybolması ya da silinmesi şeklinde açıklanabilir. Benim bu yazımda, Exchange üzerinde disk küçültme işlemi sonrası 0x80004005, ec=528 şeklinde databaselerimden birinin mount olamadığına dair uyarı vermesi ile bu hatayı daha sonra alacak kişiler için kolay çözüm yolu olması temennisi ile yazmak istedim…

Yukarıdaki fotoğrafta da göründüğü üzere Databaselerimden biri dismount olarak gözüküyor sağ tıklayıp mount dediğimde aşağıdaki şekilde hata almaktayım.

0x80004005, ec=528 unable to mount database uyarısı almaktaydım. Bu problemin çözümü için öncelikle Exchange in servislerinin durdurulması gerekmekte.

Microsoft Exchange Information Store servisini durduruyoruz.

Exchange Management Console u run as administrator şeklinde çalıştırıyoruz ve Add-PSSnapin microsoft.exchange.management.powershell.e2010 komutu ile Exchange 2010 komut bileşenlerini yüklüyoruz. Exchange Databaseinizin olduğu dizine gelerekESEUTIL /P DBADI.edb şeklinde komutumu çalıştırıyorum. (Benim databseimin adı DB02.edb) Bu DB üzerindeki problemli alanları yeniden oluşturarak problemin giderilmesi işlemini yapacaktır yani repair edecektir. Onaylamanız için bir ekran gelicektir onaylıyoruz. Tabi bu işlemleri yapmadan önce Exchange sunucunuzun bir yedeğini almanızda fayda olucaktır., diğer türlü verileriniz kaybolabilir.

İşlem tamamlandığında Operation completed successfully yazısını görebilirsiniz.

Bu işlem sonrası benim databseime göre söylüyorum DB02 klasörüne giderek log dosyalarını başka bir dizine taşıdım. Yani yukarıda görüldüğü gibi log dosyalarının bulunduğu dizin boş.

Microsoft Exchange Information Store servisini yeniden başlatıyorum

EMC üzerinden Database baktığımızda otomatik olarak mount olduğunu görebilirsiniz.

Umarım faydalı olmuştur.

Exchange Server 2010 uzerinden x-originating-ip bilgisinin kaldirilmasi

Günümüz teknolojisinin ve internetin gelişmesi ile birlikte, teknolojik sistemlerin, güvenlik açıkları zaaflarından yararlanarak, her türlü veriyi sisteminize saldırmak için değerlendiren ve hatta günümüz belası haline gelen HACK, gün be gün daha da büyümekte. Aşağıdaki haritada Norse firmasının verileri ile dünya üzerinde yapılan canlı atakları izlemeniz mümkün.

Atakları canlı izlemek için buraya  göz atabilirsiniz.

Bugün çevrenizde bir çok firmanın sisteminin ele geçirildiği, geri alınabilmesi için de para istendiğini duymuşsunuzdur. Bu konu hakkında çok fazla güvenlik önlemi alınabilinir. Bunlardan en basit ve önemli olanları, Exchange server güvenliği için Administrator hesabını Outlook Web Access e kapatılması, başlık bilgilsinin de gizlenmesi olarak öngörüyorum. Başlık bilgisi, kaynak sunucu ile mesajı gönderdiğiniz sunucu arasında,mesajın geri gönderilmesi için gerekli adres bilgisini tutmakta. Bu detaylardan yola çıkarak, Exchange server üzerinden gönderdiğiniz maillerin başlık bilgisindeki IP adresini nasıl kaldırabiliriz buna değiniyor olacağım. Başlık bilgisi hakkında daha fazla bilgiyeburadan  ulaşabilirsiniz.

Öncelikle bu IP bilgisini nasıl görebileceğimize değinelim:

Outlook üzerinden gelen maili açarak üst kısımdan File menüsüne girelim.

Gelen menüden mailin özelliklerine bir göz atmak için Properties sekmesine girelim

Özellikler sekmesinde son satırlara doğru x-originating-ip: [78.XXX.111.123] şeklinde yazdığını görebilirsiniz. Belki çok karamsar olacak ama, ucuz bir firewall cihazınız var ise buradan alınan IP bilgisi ile DDOS, SQL gibi bir çok atağa maruz kalarak sisteminizin çalışamaz hale gelmesine neden olabiliyor. Biz konumuza dönerek exchange sunucunuz üzerinden bu bilgiyi nasıl kaldırabiliriz buna bakalım, bunun iki yöntemi vardır 1. Yöntem Exchange Shell üzerinden aşağıdaki komutla yapılabiliniyormuş, lakin bende bu komut hata veriyor

Get-SendConnector “Connector Name” | Remove-ADPermission -AccessRight ExtendedRight -ExtendedRights ms-Exch-Send-Headers-Routing -user “NT AUTHORITYAnonymous Logon”

İkinci yöntem ise klasik sihirbaz yöntemi ile bunu yapmak. Bunun için Exchange Management Console u açıyoruz

Organization Configuration/Hub Transport/Transport Rules a gelerek yeni bir kural oluşturuyoruz

New Transport Rule a basarak yeni kural oluşturmaya başlayabiliriz.

Gelen ekrana Remove xorginating-ip header yazdım ben, siz kendi anlayacağınız şekilde bir isim verebilirsinizEnable Rule işaretli ve Next ile devam ediyorum.

Gelen ekranda herhangi bir conditions belirtmiyoruz Next ile devam ediyoruz

Gelen mesajı Yes ile geçiyoruz, çünkü biz kuralımızı tüm durumlar (mesajlar) için oluşturuyoruz.

 

Actions bölümünde remove header i işaretleyerek alt kısımdaki kural a dax-originating-ip yazıyoruz.

 

Exceptions bölümünü Next ile geçiyoruz

New butonuna basarak kuralımızı oluşturuyoruz

Kuralımız başarıyla oluştu.

Bu kuraldan sonraki mallerinizde ip bilginizin karşı tarafa iletilmediğini gözlemleyebilirsiniz. Yukarıdaki ekran görüntüsünde Header bilgisi olan mail ile Header bilgisi olmayan içeriğin karşılaştırmasını bulabilirsiniz. Umarım faydalı olmuştur.

Exchange Server 2010 Database bakiminin yapilmasi

Biz her ne kadar kontrol de etsek, Exchange bu işlemi otomatik olarak da yapsa zaman zaman sunucunuzun database bakımına ihtiyacı olabilir.

Bakımı yapılmamış DB üzerinde zamanla disk üzerinde büyümeler olmaktadır. Peki ne zaman bakımını yapmalıyız diye sorduğunuzu dyar gibiyim? Çalıştığım firmada 300 kadar Exchange kullanıcısı mevcut, ben yılda bir defa bakım yapıyorum, sizde yapınıza uygun bakım zamanını belirleyebilirsiniz.

Peki Bu işlemi nasıl yapabiliriz?

Öncelikle aktif durumdaki databaseimizi inaktif yapıyoruz Exchange Management Consol u açarak Organization Configuration/Mailbox/Database Management e gelerek bakımı yapılacak Database üzerinde sağ tıklayarak Dismount Database seçeneğini seçiyoruz

Database dismounted yazması gerekmekte.

Çıkan uyarıya Yes diyoruz.

Diğer türlü yapacağınız işlemlerde hata alacak ve bakımı gerçekleştiremeyeceksinizdir.

Exchange Management Shell üzerine gelerek run as administrator ile çalıştırarak konsolu açalım

Bu arada Database boyutundaki değişiklikleri görebilmek adına DB boyutunu bir yere not etmeyi unutmayın.

İlk olarak Exchange 2010 kütüphanesini aşağıdaki komutla çağırıyorum

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

Bu işlemi yapabilmek için DB boyutu kadar bir boş alana ihtiyacımız var, DB üzerindeki veriler geçici bir db e alınır ve birleştirilir, daha sonrasında birleştirilen db yine eski db üzerine aktarılarak işlem tamamlanır bu yüzden ben sunucuma extra bir disk takarak F dizinine yedek alacağım. Aşağıdaki komutu çalıştırıyorum.

eseutil /d “e:db01db01.edb” /t f:temp.edb

E diskindeki DB01 adındaki database i geçici disk olan F diski üzerinde temp adında bir db oluşturarak birleştirme işlemini yapıp geri yükleyecektir.

İşlem bir süre sonra tamamlanacaktır. Bu adımdan sonra database inizin full backupını almanız önerimdir.

Bakım işlemi sonrasında DB inizi yeniden mount edebilirsiniz.

DB üzerindeki boyutun düştüğünü gözlemleyebilirsiniz

Aynı şekilde diğer db lerinde bakımını yapmalısınız.

Umarım faydalı olmuştur

Mail grubu olusturmak ve O grup adina mail gonderimi yapma

Merhaba, Bugün bir çok firmanın ihtiyacı olan bir konuda bilgimi sizinle paylaşmaya çalışacağım, örneğin destek maili ya da ik gibi mail adresine düşen maillerin belli kullanıcılara düşmesi ve sanki yine aynı mail adresinden yanıtlanıyormuş gibi yanıtlamamız istenmiştir muhakkak, ya da böyle bir ihtiyaç doğmuştur. Böyle bir ihtiyaç olmadıysa da bir deneme yapabilirsiniz 🙂

Çalışırken makale yazmaya pek zaman ayıramadığım için, genellikle talep edilen görevleri yerine getirirken ekran görüntüsü alarak makale yazmaya çalışıyorum. Bu konuda da bu sabah insan kaynakları departmanı benden böyle bir talepte bulundu [email protected] gibi bir mail adresimiz olsun ve bu maile gelen tüm mailler insan kaynakları çalışanlarına düşsün ve bizde gönderirken [email protected] şeklinde gönderelim diye talepleri oldu. Bu iş için Exchange 2010 sunucu üzerinde Distribution Group oluşturup bazı ayarlar yapmamız gerekmekte. Ben bu konuyu iki şekilde anlatmaya çalıştım. Birincisi, Grafiksel ara yüzden diğeri ise Exchange Management Shell üzerinden, bunun nedeni ise yapacağımız bazı işlemleri grafiksel ara yüzden yapamıyoruz, bu yüzden eğer makalemi okuyorsanız makalenin tümünü okuduktan sonra uygulamaya geçin lütfen…

Exchange Server Console>Recipient Configuration>Distribution Group üzerinde yeni bir Distribution Group oluşturulur

New Distribution Group Seçilir

Gelen ekranda yeni bir grup anlamına gelen New group seçeneği seçilerek Next ile devam edilir.

Bu bir dağıtım grubu olacağı için Group Type Distribution seçilerek Name alanına dağıtım grubu adınızı yazın. Benim grup adım ik olacağı için ik olarak yazıp devam ediyorum

Gelen ekrana New seçeneğini seçerek grup oluşturmayı tamamlıyoruz.

Bunun dışında komut satırından da birkaç komutla aynı grubu oluşturmak mümkün. Öncelikle Exchange Management Shell i run as administrator ile açıp distribution ile ilgili hangi komutlar var bunlar hakkında bilgi alalım.

Get-Help *distrib* yazarak bu komuta dair komut listesini listeleyebilirsiniz.

Biz yeni bir distribution group oluşturacağız komutları // ve sonrası olmadan resimde görüldüğü gibi yazınız // ve sonrası benim yorum satırımdır.

New-DistributionGroup -Name “ik”   //IK adında Distribution Group Oluşturur

Oluşan grup yukarıda gözükmektedir.

Bu gruba normal şartlarda Hotmail,gmail ya da şirket dışarısından mail gönderimi yapabilmeniz için bazı ayarlar yapmamız gerekmektedir. Mail grubu üzerinde çift tıklayarak Mail Flow Settings seçeneğinden Message Delivery Restrictions seçeneğine gelerek Require that all senders are authenticated seçeneğindeki işareti kaldırmanız gerekmektedir.

Ya da komut satırından aşağıdaki komutu çalıştırabilirsiniz.

Set-DistributionGroup “ik” -RequireSenderAuthenticationEnabled $False   //Dış mail adreslerinden mail alabilmeyi sağlar

Get-DistributionGroup  komutu ile mevcut olan grupları listeleyebilirsiniz

Get-DistributionGroup ik | Format-List seçeneği ile ik adındaki grubun özelliklerini listeleyebilirsiniz.

Bakıldığında RequireSenderAuthenticationEnabled seçeneğinin false olduğunu görebiliriz.

Mail grubunu oluşturduk, dışarıdan mail gelmesini sağladık ama mail grubuna gelen mailler kimlere gelicek bunları belirtmemiz gerekmekte.

Members sekmesine gelerek bu alandan üyeleri ekleyebiliriz

Ya da komut satırından deren kullanıcı adına sahip personeli ik grubuna üye olarak ekleyelim

Add-DistributionGroupMember “ik” -Member deren -BypassSecurityGroupManagerCheck   //Grup için kullanıcı eklemek

Bu grubun yönetimini bazı kullanıcılara verebilirsiniz, üye alımını onaylı ya da üye alımına kapatabilirsiniz. Group Information alanında Managed by adı altında ekliyeceğiniz her kullanıcı yönetici olarak atanacak kullanıcıdır.

Aynı işlemi komut satırından da şu şekilde yapabiliriz.

Set-DistributionGroup -Identity “ik” ManagedBy deren -BypassSecurityGroupManagerCheck   //Yönetici Atamak

Herşey tamam, grubu oluşturduk, üyeleri ekledik, yöneticiyi atatık, dış kullanıcılardan mail gelmesini sağladık fakat son bir ayar daha kaldı bu da üyelerin ya da belli kullanıcıların [email protected] adı altında mail gönderebilmelerini sağlamamız gerekmektedir.

Set-DistributionGroup “ik” GrantSendOnBehalfTo deren  bu komutu ekleyerek deren kullanıcısının mail gönderimini sağlamış oluruz

Get-DistributionGroup ik | Format-List  komutunu vererek değerleri gözden geçiriniz.

GrantSendOnBehalfTo seçeneğindeki kullanıcılar mail atmaya yetkilidir. Diğer hiçbir üye mail atamaz ama benim istediğim tüm ik grubu üyeleri ik adına mail gönderebilmeli.

Bunun için aşağıdaki komutu çalıştırarak ik grubunda mail atmaya ik grubu üyeleri yetkilidir demiş olacağız

Set-DistributionGroup “ik” -GrantSendOnBehalfTo ik  //ik grubu üyeleri ik maili göndermeye yetkilidir

Exchange tarafında yapılan işlemler bu kadar.

Outlook u açarak Yeni bir mail oluşturalım. Bu alanda Office 2013 de seçenekler alanında Kimden seçeneği mevcuttur bu butona basarak bu alanın gözükmesini sağlıyoruz.

Gelen ekranda Diğer E-posta Adresi seçeneğini seçerek oluşturduğumuz mail grubunu giriyoruz

Gelen ekranda [email protected] şeklinde giriyoruz.

Kimden alanında oluşturduğumuz mail grubu olduğu sürece o grup kişisi olarak mail gönderimini gerçekleştirebiliriz.

Ek olarak; yapilan bu islemlerden sonra offline address book un silinip yada re-download edilmesi gerekiyor.

Umuyorum faydalı olmuştur. Bir sonraki makalemde görüşmek dileğiyle

Exchange Server 2010 Sertifika Yenileme Nasil Yapıilir

Merhabalar, bugün sizlere kurumlarımızda mail sunucumuz üzerinde her yıl yeniden karşı karşıya geleceğimiz bir konudan bahsetmek istiyorum. Exchange sertifika yenilemesi, mail trafiğinizi SSL (https)üzerinden yapıyorsanız sertifikanın her yıl yenilenmesi gerekmektedir. Yenilemeyi nasıl yapabileceğinize dair sizlere bilgi vermeye çalışacağım.

Sertifikanın yenilenmesi çok zor bir işlem olmamakla beraber dikat edilmesi gereken birkaç husus vardır.

Exchange Management Console u açarak Server Configuration>Exchange Certificates alanında süresi yaklaşan sertifika ünlem işareti almaktadır. Ve event loglara baktığınızda konu hakkında sertifikanın süresinin bitmesine şu kadar gün şu kadar saat kaldı gibi mesajlar göreceksinizdir.

Yenilenmesi gereken sertifika üzerine gelerek sol taraftaki çıkan menüden Renew Exchange Certificate butonuna basıyoruz.

Gelen ekranda şuanki bilgileri bir req dosyasına şifreleyerek kaydip, yine bu bilgilerle yeni bir sertifika oluşmasını sağlıyoruz. Browse butonuna basarak şu anki bilgileri içeren sertifika talebini nereye kaydedeceğiz göstermemiz gerekmekte.

Belki merak edenler için yazıyorum; Daha önceki sertifika oluşturduğumda şu isimleri eklemiştim

Exchangesunucuadi.domain.local

Mail.domain.com.tr

Autodiscover.domain.com.tr

Adreslerini ekleyerek sertifika talebinde bulunmuştum.

Adını Sertifika Yenileme Talebi.req vererek masaüstüne kaydediyorum.

İşlem tamamlandı. Finish butonuna basarak işlemi tamamlıyorum.

Masaüstüne kaydettiğim req dosyasını notepadle açtığımda karma karışık harflerle dolu bir yığın şifrelenmiş veri ile karşı karşıya kalırsınız bu kodun tamamını kopyalayarak, sertifikayı satın aldığınız firmaya göndermeniz onlarında size bu bilgiler eşliğinde oluşturduğu yeni sertifikayı göndermesi gerekmektedir.

Sertifika içindeki bilgileri sertifika firması için gönderilmesi işlemi. Ben www.digicert.com üzerinden sertifikamı kullandığım için bu site üzerine veriyi aktarıyorum.

Digicert bana yeni sertifikamı gönderdikten sonra oluşturduğumuz sertifika talebi üzerine geldiğimizde Complete Pending Request butonuna basaram talebimizi tamamlamamız gerekmekte.

Çıkan ekranda sertifika firmasının bize göndermiş olduğu yeni sertifikayı göstererek Complete butonuna basıyorum.

Talep tamamlanıyor.

Owa üzerinden mail sunucumuzun sertifikasına göz attığımızda

Sertifika bilgilerinin eski olduğunu görebilirsiniz.

IIS sunucunuzu yeniden başlattığınızda ya da sunucunuzu yeniden başlattığınızda yeni sertifika bilgileri karşınıza gelecektir. Lakin eski sertifikama baktığımda IMAP, POP, IIS, SMTP rollerine atandığını görmekteyim, yeni sertifikam ise IMAP ve POP olarak atanmış bunu da eski sertifika gibi diğer servislere atamak için, Assign Services to Certificate butonuna basarak, atama sihirbazını başlatıyoruz.

Hangi sunucu üzerine eklemek istiyorsanız bu sunucunuzu ekleyebilirsiniz.

Gerekli atamayı gerçekleştirebilmek için atamak istediğimiz servisleri seçiyoruz.

Assign butonuna basarak gerekli atamayı tamamlıyoruz.

İşlemimiz tamamlandı. Bu işlem bitmeden size eski sertifikaya bazı servislerinde atanmış olduğunu bu sertifikanın üzerine yazmak istermisiniz gibi bir uyarı verebilir yes, overwrite seçeneği ile devam edebilirsiniz.

Eski sertifikayla işimiz tamamlandı remove butonu ile eski sertifikayı silebilirsiniz.

Gelen ekrana yes butonu ile devam ediyorum ve IIS servisimi yeniden başlatıyorum

Owa ya gelerek yeni sertifika bilgisine baktığımızda sertifika geçerlilik tarihinin güncellendiğini görmekteyiz.

Sertifika ekranının son hali aşağıdaki gibidir.

Umarım faydalı olmuştur. Bir başka makalede görüşmek ümidiyle.

SQL Server Database diagram support objects cannot be installed hatasi

SQL Server a dışarıdan veri tabanı aktarmak istediğiniz de sürüm farklılığından dolayı size diagram görünümü oluşturmakta problem yaratabilir. Hele ki benim gibi diagram görünümünde çalışmaktan keyif alıyorsanız bu durum canınızı sıkacaktır.

Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.

Bu problemi giderebilmek için, veri tabanı üzerinde sağ tıklayarak properties, yani özelliklerine giriyoruz.

Gelen ekranda Compatibility level seçeneğini size gönderilen veri tabanının uyumluluğuna göre ayarlamalısınız. Örneğin SQL server 2012 kullanıyorsanız SQL Server 2012 (110) seçimi yapabilirsiniz, ya da daha düşük bir versiyon.

Sağ alandan Files bölümün de Owner (Sahiplik) alanına sa yazıyoruz ve ok diyerek pencereleri kapatıyoruz.

Veri tabanımız üzerinde Database Diagrams alanında sağ tıklayarak New Database Diagram seçeneğini seçiyorum

Gelen pencereye de Yes butonuna bastığımızda diagram oluşacaktır.

SQL Server Generate Script Ile Yedek Almak

SQL Serveriniz üzerindeki veri tabanlarını bir kaç yöntemle kolayca yedekleyebilirsiniz. Örneğin task oluşturarak, SQL Agent aracılığı ile belli zaman aralıklarında yedekleme yapabilir, ya da veri tabanını bir yerden bir yere taşımak isterseniz attach, detach işlemi yapabilirsiniz bunun dışında script oluşturma yöntemi ile yani şimdi anlatacağım şekilde de SQL sunucunuzun versiyonuna bakılmaksızın veri tabanı dosyanızı bir yerden bir yere taşımanız mümkün.

Yedekleme yapmak istediğiniz veri tabanı üzerinde sağ tıklayarak Tasks>Generate Scripts seçeneğini seçiyoruz

Tanıtım ekranını Next ile geçiyoruz

Choose Objects adımında ister tüm database’i isterseniz de tablo bazlı yedek almanız mümkün. Eğer ki siz tüm database’i yedeklemek istiyorsanız bu adımda herhangi bir değişiklik yapmanıza gerek olmayacaktır.

Set Scripting Options ekranı bizim için önemlidir, bu adımda dışa aktarılan database in içindeki verilerin aktarılması ve hangi versiyon sql sunucuda açılması gibi bazı ayarları yapabileceğimiz adımdır.

FileName  alanı databaseimizin kaydolacağı yeri göstermektedir, bu adımda dışa aktarım dosyası nereye kaydetmek istiyorsanız o dizini gösterebilirsiniz. Advanced seçeneğine basarak gerekli ayarları yapmaya devam edelim.

Advanced sekmesinde açılan ekranda Script for Server Version seçeneğinde karşı taraftaki sunucunun versiyonuna göre ayarlanmalıdır. Benim tercihim düşük versiyon olarak kaydetmeniz olacaktır. Bu versiyon ayarı yapılmadığında veri tabanı karşı sunucuda açılmayacaktır.

Bir diğer önemli adım ise Tablolar üzerindeki verilerin taşınıp taşınmayacağının karar verilmesidir. Bu adımda Schema only seçeneği ile sadece boş tabloları taşırsınız fakat içerisine girdiğiniz veriler taşınmayacaktır. Schema and data seçeneği ile hem tablolar hem de içine girdiğiniz veriler oluşturduğumuz script içerisinde aktarılacaktır. Bu adımda Schema and data seçimi duruma göre doğru olacaktır.

Yaptığımız ayarların son değişikliklerini görebileceğimiz ekran eğer, başka bir değişiklik planlamıyorsak Next ile devam edip bitirebiliriz.

Finish butonuna bastığımızda Verinin büyüklüğüne bağlı olarak script çalışıp database I dışarıya aktaracaktır.

Dışa aktarılan veri tabanı dosyası eğer file name alanında değişiklik yapmamışsanız c:%username%Documents dizininde script.sql adında olacaktır.

Veri tabanımızı dışa aktardık ve taşımak istediğimiz bilgisayar/sunucu üzerine kopyaladık bunu nasıl içe aktarabiliriz buna bakalım.

.sql uzantılı dosyaya sağ tıklayarak SQL Server Management Studio uygulaması ile birlikte açmamız gerekmektedir.

Sunucu üzerinde gerekli kullanıcı adı ve şifreyi girerek Management Studio ya login oluyoruz.

Sorgu alanında script yedeğimiz açık iken, üst alandan Execute ya da klavyeden F5 tuşuna basarak yedeği içeri aktarmak mümkün olacaktır. Bu adımda dikkat edilmesi gereken bir diğer konu ise bazen veritabanı tasarımcıları sql sunucunun kurulu olduğu dizine veritabanını oluşturmazlar, bu gerek veri tabanının büyüdüğünü düşünürsek, gerekse C diskine virüs vs. olabileceği düşüncesi ile çok da önerilmez aslında. Konuyu fazla dağıtmadan FILENAME alanında MDF (Master Data File) ve LDF (Log Data File) dosyaları mevcuttur ve bunları nereye konumlandıracağı. Bu dizinin olması gerektir ki, veri tabanı bu alana kendisini taşıyabilsin. Bizim bu örneğimizde C diski altında Otel adında bir klasör var ve bu klasör altına veri tabanımız taşınacaktır. Eğer ki biz C dizininde Otel adında bir klasör oluşturmaz isek ya da yok ise muhtemelen permission denied gibi bir hata ile karşılaşacaksınızdır.

SQL Server üzerindeki tüm databaselerinizi yedekleyin.

SQL Server üzerinde belkide 1000 tane databaseiniz mevcut, bunların herbiri için procedur yazmak yada job oluşturmak zaman alabilir. Vereceğim script ile yedekleme işlemini hızlı ve kolay bir şekilde kaç databasinizin olduğuna bakmaksızın yedekleyebilirsiniz. TechNet üzerinden bu scripte ulaşabilirsiniz.

 

[email protected](50)–[email protected](256)–[email protected](256)–[email protected](20)–usedforfilename–[email protected]=’MyBackupFilePath’–[email protected]e=CONVERT(VARCHAR(20),GETDATE(),112)DECLAREdb_cursorCURSORFOR–UsethisforalldatabaseexceptthesystemdatabasesandanyexclusionyoucanmakeSELECTnameFROMmaster.dbo.sysdatabasesWHEREnameNOTIN(‘master’,’model’,’msdb’,’tempdb’,’ReportServer’,’ReportServerTempDB’)

–Uncommentandusethisforonlyspecificdatabases.
–ThosedatabasenamesyoucanprovideunderINclauseSELECTnameFROMmaster.dbo.sysdatabasesWHEREnameIN(‘MyDB1′,’MyDB2′)[email protected]@@[email protected][email protected][email protected]+’_’[email protected]+’.BAK’[email protected][email protected]=1FETCHNEXTFROMdb_curs[email protected]_cursorDEALLOCATEdb_cursor

Kodu buradan indirebilirsiniz. http://gallery.technet.microsoft.com/T-SQL-to-backup-all-d683cfee/view/Reviews

SQL Veritabanini Suspect – Emergency Mod’dan kurtarmak

Bazen şirketinizdeki elektrik kesintisi sonucu olmadık bir şekilde aksilikler üst üste gelmiş olabilir. Dosyalar bozulmuş, database deki MDF ve LDF dosyaları bir biriyle uyumsuz olduğuna dair hatalar veriyor ve ya MASTER db in bozulduğuna dair uyarılar alıyor olabilirsiniz.

Database genellikle şu sebeplerdeb SUSPECT moduna düşmektedir.

  • Database bozulmuş olabilir
  • LDF dosyası bozulmuş olabilir
  • Boş disk alanı kalmamış olabilir yada harddiskiniz de bozulmalar meydana gelmiş olabilir.
  • SQL serverin açılabilmesi için yeterli ram in olmadığı durumlarda bu moda düşebilir.

Bu dosyayı normale çekebilmek için aşağıdaki adımları yapmamız gerekiyor.

Not: DATABASE imin adı Axata_Entegrasyon dur siz burada kendi databaseinizin adını yazmanız gerekmektedir.

SQL üzerinde en üstte New Query I çalıştırarak query ekranında aşağıdaki komutları çalıştırmamız gerekmektedir. Ben ortamımda alt alta kodları yazdım, hangi kod bloğunu çalıştırmak istiyorsanız o bloğu seçerek klavyeden F5 tuşuna basarak sadece o komutu çalıştırabilirsiniz.

Suspect modda olan bir veritabanının yedeğini alamamaktayız bundan dolayı yeniden attach yapılana dek bozuk olan databaseinizi detach etmeyin.

-Database in statüsünü resetleyerek manuel müdahaleye izin verir

EXEC sp_resetstatus ‘Axata_Entegrasyon’

-Database dosyasını EMERGENCY moda çekiyoruz.

alter databaseAxata_Entegrasyon set emergency

-Database üzerinde veri bozukluğu olup olmadığını kontrol edelim

dbcc checkdb (‘Axata_Entegrasyon’)

-Database üzerinde değişiklik yapabilmek için SINGLE mod a alıyoruz

ALTER DATABASE Axata_Entegrasyon SET SINGLE_USER WITH ROLLBACK IMMEDIATE

-Database üzerindeki tam oluşmamış log ve veri dosyalarının silinmesi için aşağıdaki komutu çalıştırıyoruz. Dikkat*** Bazı veriler silinebilir

DBCC CHECKDB (‘Axata_Entegrasyon’, REPAIR_ALLOW_DATA_LOSS)

-Son olarak Databaseimizi normal moda a çekerek kullanmaya başlıyoruz

ALTER DATABASE Axata_Entegrasyon SET MULTI_USER

Bu komutlar sonrası herşeyin normale döndüğü gözlenmekte

Not: Bu makaledeki ekran görüntüleri canlı ortamda uygulanarak alınmıştır.

Referans: http://sqlservr.blog.com/2012/08/31/how-to-recovery-database-from-suspect-mode/