Daha çox

SQL Server Express-də ArcSDE geodatabase verilənlər bazasını saxlamaq üçün Python istifadə edirsiniz?


SQL Server Express-də saxlanılan ArcSDE verilənlər bazalarının ehtiyat nüsxəsini etmək üçün Python istifadə etmək mümkündürmü? Arcobjects istifadə edən xüsusi bir çalıştırılabilir istifadə edirdim

IDataServerManagerAdmin.BackupGeodatabase ()

lakin, Python'dan istifadə etməyi üstün tutardım. İcra edilə bilən şey İT işçilərimizi bir az narahat edir.


Bir verilənlər bazası serverindəki bir geodatabase-in ehtiyat nüsxəsi ArcCatalog və Arcobjects (IDataServerManagerAdmin.BackupGeodatabase ()) istifadə edilə bilər. Təəssüf ki, piton və ya Arcpy-yə məruz qalmır.

Beləliklə, yedekləmə prosesini avtomatlaşdırmaq üçün MS SQL Serverdə saxlanılan bir prosedur yaratmalı və sonra saxlanılan proseduru çağırmaq üçün bir toplu faylı yaratmalısınız. Nəhayət, toplu iş sənədini planlaşdırın.

Saxlanılan prosedur

[Master] GO / ****** Object: StoredProcedure [dbo] istifadə edin. [Sp_BackupDatabases] ****** / GO SET QUOTED_IDENTIFIER ON GO CREATE PROSEDURE [dbo]. [Sp_BackupDatabases] @databaseName sysname = null, @backupType CHAR (1), @backupLocation nvarchar (200) OLARAQ NOCOUNT AÇIK; @DBs CƏDVƏLİNİ BİLDİRİN (ID int IDENTITY PRIMARY KEY, DBNAME nvarchar (500)) - BÜTÜN verilənlər bazalarının ehtiyat nüsxəsi alınmaq üçün seçildiyi halda yalnız onlayn olan verilənlər bazalarını seçin @DBs-dən INSERT INTO @DBs-ə (DBNAME) master.sys.databases-dan AD SEÇİN, burada vəziyyət = 0 AND name = @ DatabaseName VƏ @DatabaseName SİFARİŞDİR Ad, Ad - Yedəklənməsi lazım olmayan verilənlər bazalarını süzün. backupType = 'F' DBNAME IN ('tempdb', 'Northwind', 'pubs', 'AdventureWorks') olduğu @DB'ləri BAŞLA BAŞLA, DBNAME IN ('tempdb', 'Northwind', 'pubs', 'master', 'AdventureWorks') BAŞQA SONRADA @ backupType = 'L' DBNAME IN ('tempdb', 'Northwind', 'pubs', 'master', 'olduğu @DB'ləri SİLMƏYƏ BAŞLAYIN. AdventureWorks ') BAŞQA SONRA BAŞLAMAQ SONUNDA - Dəyişənləri elan et @BackupName varchar (100) DECLARE @BackupFile varchar (100) DECLARE @DBNAME varchar (300) DECLARE @sqlCommand NVARCHAR (1000) DECLARE @dateTime NVAR in t - Verilənlər bazalarını təkrar-təkrar nəzərdən keçirin @Loop = min (ID) @DBs-dən @Loop NULL BAŞLANMADI - Verilənlər bazası adları [dbname] formatında olmalıdır, çünki bəzilərinin adında SET var - və ya _. @DBNAME = '[' + (DBNAME SEÇİN @DB'LƏRDƏN ID = @Loop) + ']' - Cari tarixi və saatı n yyyyhhmmss formatını təyin et SET @dateTime = DEĞİŞTİR (CONVERT (VARCHAR, GETDATE (), 101) , '/', ") + '_' + DEĞİŞTİR (CONVERT (VARCHAR, GETDATE (), 108), ':',") - Tam, diff və günlük qeydləri üçün yol  filename.extension formatında yedek fayl adı yaradın. IF @backupType = 'F' SET @BackupFile = @ backupLocation + REPLACE (REPLACE (@DBNAME, '[', "), ']',") + '_FULL _' + @ dateTime + '. BAK' ELSE IF @backupType = 'D' SET @BackupFile = @ backupLocation + DEĞİŞTİR (DAVAM EDİN (@DBNAME, '[', "), ']',") + '_DIFF _' + @ dateTime + '. BAK' ELSE IF @backupType = 'L' SET @BackupFile = @ backupLocation + REPLACE (DEĞİŞTİR (@DBNAME, '[', "), ']',") + '_LOG _' + @ dateTime + '.TRN' - Yedəkləmə üçün mühitdə saxlamaq üçün bir ad verin IF @backupType = 'F' SET @ BackupName = Dəyişdirin (REPL ACE (@DBNAME, '[', "), ']',") + 'üçün tam ehtiyat' + @dateTime IF @backupType = 'D' SET @BackupName = REPLACE (REPLACE (@DBNAME, '[', ") ), ']', ") + 'üçün diferensial yedəkləmə' + @dateTime IF @backupType = 'L' SET @BackupName = REPLACE (REPLACE (@DBNAME, '[',"), ']', ") + ' '+ @dateTime üçün qeyd nüsxəsi - icra ediləcək dinamik SQL əmrini yaradın IF @backupType =' F 'BAŞLAYIN SET @sqlCommand =' YEDƏK VERİ BAZASI '+ @ DBNAME +' DISK = "+ @ BackupFile +" INIT, NAME = "+ @ BackupName +", NOSKIP, NOFORMAT 'SONDUR, @backupType =' D 'SET BAŞLADI @sqlCommand =' YEDƏK VERİ BAZASI '+ @ DBNAME +' DİSK EDƏCƏK = "+ @ BackupFile +" Fərqli, INIT, NAME = "+ @ Backup ", NOSKIP, NOFORMAT 'SONDUR, @backupType =' L 'BAŞLAYIB @sqlCommand =' YEDEKLƏMƏ LOG '+ @ DBNAME +' DİSK EDƏ =" + @ BackupFile + "INIT, NAME =" + @ BackupName + ", NOSKIP, NOFORMAT ' END - Yaratılmış SQL əmrini həyata keçirin EXEC (@sqlCommand) - Növbəti verilənlər bazasını seçin SELECT @Loop = min (ID) FROM @ DBs where ID> @Loop END

Toplu sənəd

  1. Windows Kimlik Doğrulaması istifadə edərək SQLEXPRESS yerli adlı instansiyasındakı bütün verilənlər bazalarının tam nüsxələri üçün

    sqlcmd -S. EXPRESS -E -Q "EXEC sp_BackupDatabases @ backupLocation = 'D: SQLBackups ', @ backupType = 'F'"

  2. Bir SQLLogin və parolunu istifadə edərək SQLEXPRESS lokal adlı instansiyasındakı bütün verilənlər bazalarının diferensial ehtiyat nüsxələri

    sqlcmd -U SQLLogin -P parolu -S. SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation = 'D: SQLBackups', @ BackupType = 'D'"

Və Windows Task Scheduler ilə planlaşdırın.

İstinad: SQL Server Express-də SQL Server verilənlər bazalarının ehtiyat nüsxələrinin planlaşdırılması və avtomatlaşdırılması


@Farid Cher'in bunu xarici olaraq skript edilmiş bir yedekləmə əvəzinə SQL əsaslı bir yedekləmə yolu ilə yerinə yetirmək üçün baxmalı olduğunuz cavabı ilə razıyam. Bununla birlikdə, məlumatları python vasitəsilə ehtiyat nüsxəsində saxlamağa qərarlısınızsa, ehtimal ki, 2 həll yolu düşünə bilərəm. Xahiş edirəm unutmayın, bunların heç biri əsl verilənlər bazası ehtiyat nüsxəsi deyildir. Bununla birlikdə, məlumatları xaricdən verilənlər bazanızdan saxlaya bilirlər, beləliklə verilənlər bazası itkisi halında yeni bir SDE verilənlər bazası yarada və yedeklənmiş məlumatları ona köçürə bilərsiniz.

Seçim 1) SDE verilənlər bazanızdan başqa bir saytda başqa bir maşında ideal şəkildə olacaq bir FileGDB-yə (təkrarlamaq və ya arxivləşdirmə və ya ənənəvi versiyaya əsaslanan replika) tək bir surət yaradın. Sonra python-dan təkrar ehtiyac duyduğunuz zaman sinxronizasiya etmək üçün arcpy istifadə edən bir python skriptini planlaşdırmaq olar. Bunun bəzi məhdudiyyətləri, yalnız bir versiyanın (hansı versiyanı çıxardığınızdan asılı olmayaraq) ehtiyat nüsxəsini çıxartmasıdır. Ayrıca, verilənlər bazanızın şemasını dəyişdirdiyiniz zaman (sahələri əlavə etmək / dəyişdirmək və / və ya xüsusiyyət siniflərini / cədvəllərini əlavə etmək / dəyişdirmək) şema dəyişikliklərini sinxronlaşdırmalı və / və ya kopyasını yenidən yaratmalısınız. sxem dəyişikliyi. Əlavə olaraq, yedəkləməyinizi istədiyiniz bütün xüsusiyyət siniflərinin, istifadə etdiyiniz təkrar növündən asılı olaraq ya versiyalı olaraq qeydiyyatdan keçməsi, ya da arxivləşdirilməsinin aktivləşdirilməsi lazımdır.

Seçim 2) SDE-də hər xüsusiyyət sinfi, xüsusiyyət verilənlər bazası, alət qutusu, cədvəl və s. Arasından keçəcək bir python skriptini əldə etmək üçün bir skript yaza bilərsiniz (və ya forumlarda axtarış aparın və saytlarda kömək edin və bunun üçün mövcud kodu bir yerə yığın). verilənlər bazası və verilənlər bazasını bir FileGDB-yə kopyalayın. Bu marşrutdan istifadə edərkən diqqətli olmağınız bəzi şeylər: əlaqələr sinifləriniz varsa, diqqətli olun, çünki ArcGIS-də kopyalama alətləri əlaqəli məlumatlarla bəzi maraqlı şeylər edə bilər, buna görə də skriptiniz bütün məlumatların düzgün kopyalandığından əmin olmalıdır bəzi marşrut kodu, həqiqətən bu marşruta getmək istəyirsinizsə, sizə kömək edə bilərəm). Bunun məhdudiyyətləri, nəzəri olaraq bunu birdən çox məlumat versiyası üçün edə bildiyiniz halda, hər bir redaktə versiyası üçün ayrıca bir FileGDB ehtiyat nüsxəsi etməlisiniz, yəni ehtiyat harddrive məkan tələbləri və ehtiyatı çalıştırmaq üçün lazım olan vaxt böyüyə bilər / uzun sürətlə. Ayrıca, bu yedekləmə üsulu, həqiqətən bir yedekləmə üçün lazım olduğundan daha uzun sürə bilər. Bu, həm də bir ehtiyat nüsxəsini çalıştırmaq istədiyiniz zaman bütün verilənlər bazasını yenidən yazmağı tələb edir, buna görə də bir çox harddrive disk fəaliyyəti istehlakı ola bilər (server / kompüter üçün aşağı vaxtda işləməsi planlaşdırılmalıdır) və lazım olacaq mütləq bir FGDB qatı hal sürücüsünə və ya flash sürücüsünə dəstəklənməməsi, çünki bu proses verilənlər bazasının tezliyindən və ölçüsündən asılı olaraq diskdə yazma məhdudiyyətlərini nisbətən tez çıxara bilər. Ayrıca, bu metod (hansı kopyalama alətlərindən istifadə etdiyinizə görə) GlobalID sahə dəyərlərini qoruya bilər, lakin qorumaq üçün qətiliklə zəmanət verilmir, buna görə qorunan qloballaşanlar sizin üçün bir şərtdirsə istifadə etməyin.

Yenə də başqa bir cavabda təsvir edilmiş planlaşdırılmış toplu fayl metodundan istifadə edərək verilənlər bazasının həqiqi bir nüsxəsini əldə etmək üçün SQL əsaslı bir ehtiyat nüsxəsini istifadə etməyi məsləhət görürəm, ancaq Python vasitəsilə mütləq bir şey etməlisinizsə, inşallah yuxarıdakılar sizə bir neçə fikir verir ilə işləmək.