ArcSDE版本压缩(Compress)(2)

转载自:http://blog.csdn.net/linghe301/article/details/7777912


其实我在今年的开发者大会中专门对ArcGIS版本压缩做了一个详细的说明。为什么专门来说这个呢?其实现在对ArcGIS用户来说,他们在使用多用户版本操作时,发现性能慢一般都知道进行ArcGIS版本压缩,但是他们往往做的就是Compress操作,这样做是远远不够的,因为什么都不管只进行compress操作,不能彻底的进行压缩,也就是压缩的不彻底, 那么标准的ArcGIS版本压缩流程是什么样的呢?

首先说明,理想的版本压缩后是什么样子的

1:不能出错。(这像是废话)

2:增量表的数据为空

3:状态表和族系表一条记录也就是State_ID=0

相关的压缩流程,使用专门的管理员用户

1:断开其他所有用户的连接,阻止其他新用户连接

2:相关的子版本进行协调和提交

Python实现批量执行ArcGIS版本的协调和提交

http://blog.csdn.NET/linghe301/article/details/7777816

3:数据备份(这个和2可以互换顺序)

关于ArcGIS数据迁移方案的策略(备份也可以参考)

http://blog.csdn.net/linghe301/article/details/6330759

4:删除相关子版本(注意如果使用过同步复制,注意相关的隐藏子版本)

5:删除相关的锁信息

 以Oracle 数据库为例sde用户下

  • state_locks
  • table_locks
  • object_locks
  • layer_locks
ArcGIS锁的介绍
http://blog.csdn.net/linghe301/article/details/7345194

6:进行版本压缩

ArcGIS版本压缩(Compress)报ORA-00001: unique constraint 的解决方法
http://blog.csdn.net/linghe301/article/details/7331992
ArcSDE版本压缩之前对UNDO表空间的设置
http://blog.csdn.net/linghe301/article/details/7335530

关于ArcSDE版本压缩(Compress)的再研究

http://blog.csdn.net/linghe301/article/details/6399036

7:创建子版本

一种快速批量创建子版本的方法

http://blog.csdn.net/linghe301/article/details/7329531

8:重建空间索引

 怎么对ArcSDE数据库的要素类进行批量重建空间索引

http://blog.csdn.net/linghe301/article/details/7720871

9:进行统计分析

10:允许其他新用户连接


那么真正的压缩只有这样才能彻底压缩干净。

那么我们也可以使用python进行这样的操作,我没有经这些环节搞成一个现成可以用的脚本,以下的脚本文件仅供参考

  1. import arcpy, time, smtplib  
  2.   
  3. # set the workspace   
  4. arcpy.env.workspace = 'Database Connections/admin.sde'  
  5.   
  6. # set a variable for the workspace  
  7. workspace = arcpy.env.workspace  
  8.   
  9. # get a list of connected users.  
  10. userList = arcpy.ListUsers("Database Connections/admin.sde")  
  11.   
  12. # get a list of usernames of users currently connected and make email addresses  
  13. emailList = [u.Name + "@yourcompany.com" for user in arcpy.ListUsers("Database Connections/admin.sde")]  
  14.   
  15. # take the email list and use it to send an email to connected users.  
  16. SERVER = "mailserver.yourcompany.com"  
  17. FROM = "SDE Admin "  
  18. TO = emailList  
  19. SUBJECT = "Maintenance is about to be performed"  
  20. MSG = "Auto generated Message.\n\rServer maintenance will be performed in 15 minutes. Please log off."  
  21.   
  22. # Prepare actual message  
  23. MESSAGE = """\ 
  24. From: %s 
  25. To: %s 
  26. Subject: %s 
  27.  
  28. %s 
  29. """ % (FROM, ", ".join(TO), SUBJECT, MSG)  
  30.   
  31. # Send the mail  
  32. server = smtplib.SMTP(SERVER)  
  33. server.sendmail(FROM, TO, MESSAGE)  
  34. server.quit()  
  35.   
  36. #block new connections to the database.  
  37. arcpy.AcceptConnections('Database Connections/admin.sde'False)  
  38.   
  39. # wait 15 minutes  
  40. time.sleep(900)  
  41.   
  42. #disconnect all users from the database.  
  43. arcpy.DisconnectUser('Database Connections/admin.sde'"ALL")  
  44.   
  45. # Get a list of versions to pass into the ReconcileVersions tool.  
  46. versionList = arcpy.ListVersions('Database Connections/admin.sde')  
  47.   
  48. # Execute the ReconcileVersions tool.  
  49. arcpy.ReconcileVersions_management('Database Connections/admin.sde'"ALL_VERSIONS""sde.DEFAULT", versionList, "LOCK_ACQUIRED""NO_ABORT""BY_OBJECT""FAVOR_TARGET_VERSION""POST""DELETE_VERSION""c:/temp/reconcilelog.txt")  
  50.   
  51. # Run the compress tool.   
  52. arcpy.Compress_management('Database Connections/admin.sde')  
  53.   
  54. #Allow the database to begin accepting connections again  
  55. arcpy.AcceptConnections('Database Connections/admin.sde'True)  
  56.   
  57. #Get a list of datasets owned by the admin user  
  58.   
  59. # Get the user name for the workspace  
  60. # this assumes you are using database authentication.  
  61. # OS authentication connection files do not have a 'user' property.  
  62. userName = arcpy.Describe(arcpy.env.workspace).connectionProperties.user  
  63.   
  64. # Get a list of all the datasets the user has access to.  
  65. # First, get all the stand alone tables, feature classes and rasters.  
  66. dataList = arcpy.ListTables('*.' + userName + '.*') + arcpy.ListFeatureClasses('*.' + userName + '.*') + arcpy.ListRasters('*.' + userName + '.*')  
  67.   
  68. # Next, for feature datasets get all of the featureclasses  
  69. # from the list and add them to the master list.  
  70. for dataset in arcpy.ListDatasets('*.' + userName + '.*'):  
  71.     dataList += arcpy.ListFeatureClasses(feature_dataset=dataset)  
  72.   
  73. # pass in the list of datasets owned by the admin to the rebuild indexes and analyze datasets tools  
  74. # Note: to use the "SYSTEM" option the user must be an administrator.  
  75. arcpy.RebuildIndexes_management(workspace, "SYSTEM", dataList, "ALL")  
  76.   
  77. arcpy.AnalyzeDatasets_management(workspace, "SYSTEM", dataList, "ANALYZE_BASE""ANALYZE_DELTA""ANALYZE_ARCHIVE")  


以下的压缩代码仅供参考,适用于ArcGIS9.2/9.3

  1. # This script is designed to compress an SDE Geodatabase and then  
  2. # loop through and analyze the statistics ofeach feature dataset, feature class and table.  
  3. # It is designed to log the entire process to a text file and  
  4. # if there are any errors during the process the script will email a specified address.  
  5. # Created by Mike Long - [email protected]  
  6. # Last Modified on 7/16/09  
  7.   
  8. # Import system, Geoprocessing, time and email modules  
  9. import sys, string, os, arcgisscripting, time, smtplib  
  10.   
  11. # Set the date.  
  12. Date = time.strftime("%m-%d-%Y", time.localtime())  
  13.   
  14. # Set the time.  
  15. Time = time.strftime("%I:%M:%S %p", time.localtime())  
  16.   
  17. # Create the Geoprocessor object  
  18. gp = arcgisscripting.create()  
  19.   
  20. gp.CheckProduct("ArcEditor"# Checks the license level.  
  21.       
  22. gp.SetProduct("arceditor"# Sets the license level.  
  23.   
  24. print "Process started at " + str(Date) + " " + str(Time) + "." + "\n"  
  25.   
  26. # Set up the log file.  
  27. LogFile = file('C:\\PythonScripts\\Analyze\\GIS-' + Date + '.txt''w'#Creates a log file with todays date.  
  28. output = open('C:\\PythonScripts\\Analyze\\GIS-' + Date + '.txt''w'#Path to log file.  
  29. output.write(str("Process started at " + str(Date) + " " + str(Time) + "." + "\n")) # Write the start time to the log file.  
  30.   
  31.   
  32. # Load required toolboxes  (This shouldn't need to be changed unless ArcGIS was  
  33. #                           installed to a different location)  
  34. gp.AddToolbox("F:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")  
  35.   
  36. try:  
  37.     # Compress the database  
  38.     print "Begining Compress..." + "\n"  
  39.     gp.toolbox = "management"  
  40.     # For this script to work it will need the full path to the .sde connection file.  
  41.     gp.compress("C:\\Documents and Settings\\mlong\\Application Data\\ESRI\\ArcCatalog\\[email protected]")  
  42.     print gp.GetMessages() + "\n"  
  43.     output.write(gp.GetMessages()+ "\n")  
  44.   
  45. except:  
  46.     #Sets up the email parameters  
  47.   
  48.     From = "Geoprocessor"  
  49.     To = ["[email protected]"# This is the email address that will receive any errors.  
  50.     Date = time.ctime(time.time())  
  51.     Subject = "Error Compressing the GIS Database"   
  52.     Text = gp.GetMessages()  
  53.   
  54.     #Format mail message  
  55.     mMessage = ('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s\n' %  
  56.                 (From, To, Date, Subject, Text))  
  57.     print 'Connecting to Server'  
  58.     s = smtplib.SMTP('machinename.domainname.com'# This needs to be set to your email server.  
  59.   
  60.     #Send Email  
  61.     rCode = s.sendmail(From, To, mMessage)  
  62.     s.quit()  
  63.   
  64.     if rCode:  
  65.         print 'Error Sending Message'  
  66.     else:  
  67.         print 'Message sent sucessfully'  
  68.   
  69. analyzeworkspace = "C:\\Documents and Settings\\mlong\\Application Data\\ESRI\\ArcCatalog\\Model Connection.sde"  
  70.   
  71. try:  
  72.     # Loop through and analyze all Feature datasets  
  73.     gp.Workspace = analyzeworkspace  
  74.     FCList = gp.ListFeatureClasses ("*""all")  
  75.     FC = FCList.Next()  
  76.     while FC:  
  77.         gp.Analyze_management(FC, "BUSINESS;FEATURE;ADDS;DELETES")  
  78.         print gp.GetMessages() + "\n"  
  79.         output.write(gp.GetMessages()+ "\n")  
  80.         FC = FCList.Next()  
  81.     # Loop through and analyze all the Feature classes  
  82.     gp.Workspace = analyzeworkspace  
  83.     FDList = gp.ListDatasets ("*""all")  
  84.     FD = FDList.Next()  
  85.     while FD:  
  86.         gp.Analyze_management(FD, "BUSINESS;FEATURE;ADDS;DELETES")  
  87.         print gp.GetMessages() + "\n"  
  88.         output.write(gp.GetMessages())  
  89.         FD = FDList.Next()  
  90.     # Loop through and analyze all the Tables.  
  91.     # The if-else statements set the script to skip over Multi-Versioned Views.  
  92.     gp.Workspace = analyzeworkspace  
  93.     TBList = gp.ListTables ("*""all")  
  94.     TB = TBList.Next()  
  95.     while TB:  
  96.         if '_MVVIEW' in TB:  
  97.             print "Skipping Multi-Versioned View"  
  98.         elif '_MVView' in TB:  
  99.             print "Skipping Multi-Versioned View"  
  100.         else:  
  101.             gp.Analyze_management(TB, "BUSINESS;FEATURE;ADDS;DELETES")  
  102.             print gp.GetMessages() + "\n"  
  103.             output.write(gp.GetMessages())  
  104.         TB = TBList.Next()  
  105.   
  106. except:  
  107.     print gp.GetMessages()  
  108.     output.write(gp.GetMessages())  
  109.   
  110.     #Sets up the email parameters  
  111.   
  112.     From = "Geoprocessor"  
  113.     To = ["[email protected]"]  
  114.     Date = time.ctime(time.time())  
  115.     Subject = "Error Analyzing the GIS Database"  
  116.     Text = gp.GetMessages()  
  117.   
  118.     #Format mail message  
  119.     mMessage = ('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s\n' %  
  120.                 (From, To, Date, Subject, Text))  
  121.     print 'Connecting to Server'  
  122.     s = smtplib.SMTP('machinename.domainname.com')  
  123.   
  124.     #Send Email  
  125.     rCode = s.sendmail(From, To, mMessage)  
  126.     s.quit()  
  127.   
  128.     if rCode:  
  129.         print 'Error Sending Message'  
  130.     else:  
  131.         print 'Message sent sucessfully'  
  132.   
  133. # Sets the Date & Time since the script started.  
  134. Date = time.strftime("%m-%d-%Y", time.localtime())# Set the date.  
  135. Time = time.strftime("%I:%M:%S %p", time.localtime()) # Set the time.  
  136. output.write(str("Process completed at " + str(Date) + " " + str(Time) + "." + "\n")) # Write the start time to the log file.  
  137.   
  138. output.close() # Closes the log file.  
  139.   
  140. print "Process completed at " + str(Date) + " " + str(Time) + "."  

你可能感兴趣的:(ArcSDE版本压缩(Compress)(2))