怎么才能实现真正的ArcGIS版本压缩(Compress)
2012-11-09 11:04
330 查看
其实我在今年的开发者大会中专门对ArcGIS版本压缩做了一个详细的说明。为什么专门来说这个呢?其实现在对ArcGIS用户来说,他们在使用多用户版本操作时,发现性能慢一般都知道进行ArcGIS版本压缩,但是他们往往做的就是Compress操作,这样做是远远不够的,因为什么都不管只进行compress操作,不能彻底的进行压缩,也就是压缩的不彻底, 那么标准的ArcGIS版本压缩流程是什么样的呢?
首先说明,理想的版本压缩后是什么样子的
1:不能出错。(这像是废话)
2:增量表的数据为空
3:状态表和族系表一条记录也就是State_ID=0
相关的压缩流程,使用专门的管理员用户
1:断开其他所有用户的连接,阻止其他新用户连接
2:相关的子版本进行协调和提交
Python实现批量执行ArcGIS版本的协调和提交
/article/1426486.html
3:数据备份(这个和2可以互换顺序)
关于ArcGIS数据迁移方案的策略(备份也可以参考)
/article/1358787.html
4:删除相关子版本(注意如果使用过同步复制,注意相关的隐藏子版本)
5:删除相关的锁信息
以oracle 数据库为例sde用户下
state_locks
table_locks
object_locks
layer_locks
ArcGIS锁的介绍 /article/1426540.html
6:进行版本压缩
ArcGIS版本压缩(Compress)报ORA-00001: unique constraint 的解决方法
/article/1426534.html
ArcSDE版本压缩之前对UNDO表空间的设置
/article/1426532.html
关于ArcSDE版本压缩(Compress)的再研究
/article/1358785.html
7:创建子版本
一种快速批量创建子版本的方法
/article/1426543.html
8:重建空间索引
怎么对ArcSDE数据库的要素类进行批量重建空间索引
/article/1426514.html
9:进行统计分析
10:允许其他新用户连接
那么真正的压缩只有这样才能彻底压缩干净。
那么我们也可以使用python进行这样的操作,我没有经这些环节搞成一个现成可以用的脚本,以下的脚本文件仅供参考
以下的压缩代码仅供参考,适用于ArcGIS9.2/9.3
Esri 相关系列文章:
-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------
首先说明,理想的版本压缩后是什么样子的
1:不能出错。(这像是废话)
2:增量表的数据为空
3:状态表和族系表一条记录也就是State_ID=0
相关的压缩流程,使用专门的管理员用户
1:断开其他所有用户的连接,阻止其他新用户连接
2:相关的子版本进行协调和提交
Python实现批量执行ArcGIS版本的协调和提交
/article/1426486.html
3:数据备份(这个和2可以互换顺序)
关于ArcGIS数据迁移方案的策略(备份也可以参考)
/article/1358787.html
4:删除相关子版本(注意如果使用过同步复制,注意相关的隐藏子版本)
5:删除相关的锁信息
以oracle 数据库为例sde用户下
state_locks
table_locks
object_locks
layer_locks
ArcGIS锁的介绍 /article/1426540.html
6:进行版本压缩
ArcGIS版本压缩(Compress)报ORA-00001: unique constraint 的解决方法
/article/1426534.html
ArcSDE版本压缩之前对UNDO表空间的设置
/article/1426532.html
关于ArcSDE版本压缩(Compress)的再研究
/article/1358785.html
7:创建子版本
一种快速批量创建子版本的方法
/article/1426543.html
8:重建空间索引
怎么对ArcSDE数据库的要素类进行批量重建空间索引
/article/1426514.html
9:进行统计分析
10:允许其他新用户连接
那么真正的压缩只有这样才能彻底压缩干净。
那么我们也可以使用python进行这样的操作,我没有经这些环节搞成一个现成可以用的脚本,以下的脚本文件仅供参考
import arcpy, time, smtplib # set the workspace arcpy.env.workspace = 'Database Connections/admin.sde' # set a variable for the workspace workspace = arcpy.env.workspace # get a list of connected users. userList = arcpy.ListUsers("Database Connections/admin.sde") # get a list of usernames of users currently connected and make email addresses emailList = [u.Name + "@yourcompany.com" for user in arcpy.ListUsers("Database Connections/admin.sde")] # take the email list and use it to send an email to connected users. SERVER = "mailserver.yourcompany.com" FROM = "SDE Admin <python@yourcompany.com>" TO = emailList SUBJECT = "Maintenance is about to be performed" MSG = "Auto generated Message.\n\rServer maintenance will be performed in 15 minutes. Please log off." # Prepare actual message MESSAGE = """\ From: %s To: %s Subject: %s %s """ % (FROM, ", ".join(TO), SUBJECT, MSG) # Send the mail server = smtplib.SMTP(SERVER) server.sendmail(FROM, TO, MESSAGE) server.quit() #block new connections to the database. arcpy.AcceptConnections('Database Connections/admin.sde', False) # wait 15 minutes time.sleep(900) #disconnect all users from the database. arcpy.DisconnectUser('Database Connections/admin.sde', "ALL") # Get a list of versions to pass into the ReconcileVersions tool. versionList = arcpy.ListVersions('Database Connections/admin.sde') # Execute the ReconcileVersions tool. arcpy.ReconcileVersions_management('Database Connections/admin.sde', "ALL_VERSIONS", "sde.DEFAULT", versionList, "LOCK_ACQUIRED", "NO_ABORT", "BY_OBJECT", "F***OR_TARGET_VERSION", "POST", "DELETE_VERSION", "c:/temp/reconcilelog.txt") # Run the compress tool. arcpy.Compress_management('Database Connections/admin.sde') #Allow the database to begin accepting connections again arcpy.AcceptConnections('Database Connections/admin.sde', True) #Get a list of datasets owned by the admin user # Get the user name for the workspace # this assumes you are using database authentication. # OS authentication connection files do not have a 'user' property. userName = arcpy.Describe(arcpy.env.workspace).connectionProperties.user # Get a list of all the datasets the user has access to. # First, get all the stand alone tables, feature classes and rasters. dataList = arcpy.ListTables('*.' + userName + '.*') + arcpy.ListFeatureClasses('*.' + userName + '.*') + arcpy.ListRasters('*.' + userName + '.*') # Next, for feature datasets get all of the featureclasses # from the list and add them to the master list. for dataset in arcpy.ListDatasets('*.' + userName + '.*'): dataList += arcpy.ListFeatureClasses(feature_dataset=dataset) # pass in the list of datasets owned by the admin to the rebuild indexes and analyze datasets tools # Note: to use the "SYSTEM" option the user must be an administrator. arcpy.RebuildIndexes_management(workspace, "SYSTEM", dataList, "ALL") arcpy.AnalyzeDatasets_management(workspace, "SYSTEM", dataList, "ANALYZE_BASE", "ANALYZE_DELTA", "ANALYZE_ARCHIVE")
以下的压缩代码仅供参考,适用于ArcGIS9.2/9.3
# This script is designed to compress an SDE Geodatabase and then # loop through and analyze the statistics ofeach feature dataset, feature class and table. # It is designed to log the entire process to a text file and # if there are any errors during the process the script will email a specified address. # Created by Mike Long - ml56067@gmail.com # Last Modified on 7/16/09 # Import system, Geoprocessing, time and email modules import sys, string, os, arcgisscripting, time, smtplib # Set the date. Date = time.strftime("%m-%d-%Y", time.localtime()) # Set the time. Time = time.strftime("%I:%M:%S %p", time.localtime()) # Create the Geoprocessor object gp = arcgisscripting.create() gp.CheckProduct("ArcEditor") # Checks the license level. gp.SetProduct("arceditor") # Sets the license level. print "Process started at " + str(Date) + " " + str(Time) + "." + "\n" # Set up the log file. LogFile = file('C:\\PythonScripts\\Analyze\\GIS-' + Date + '.txt', 'w') #Creates a log file with todays date. output = open('C:\\PythonScripts\\Analyze\\GIS-' + Date + '.txt', 'w') #Path to log file. output.write(str("Process started at " + str(Date) + " " + str(Time) + "." + "\n")) # Write the start time to the log file. # Load required toolboxes (This shouldn't need to be changed unless ArcGIS was # installed to a different location) gp.AddToolbox("F:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx") try: # Compress the database print "Begining Compress..." + "\n" gp.toolbox = "management" # For this script to work it will need the full path to the .sde connection file. gp.compress("C:\\Documents and Settings\\mlong\\Application Data\\ESRI\\ArcCatalog\\SDE@GIS.sde") print gp.GetMessages() + "\n" output.write(gp.GetMessages()+ "\n") except: #Sets up the email parameters From = "Geoprocessor" To = ["your_email@domain.com"] # This is the email address that will receive any errors. Date = time.ctime(time.time()) Subject = "Error Compressing the GIS Database" Text = gp.GetMessages() #Format mail message mMessage = ('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s\n' % (From, To, Date, Subject, Text)) print 'Connecting to Server' s = smtplib.SMTP('machinename.domainname.com') # This needs to be set to your email server. #Send Email rCode = s.sendmail(From, To, mMessage) s.quit() if rCode: print 'Error Sending Message' else: print 'Message sent sucessfully' analyzeworkspace = "C:\\Documents and Settings\\mlong\\Application Data\\ESRI\\ArcCatalog\\Model Connection.sde" try: # Loop through and analyze all Feature datasets gp.Workspace = analyzeworkspace FCList = gp.ListFeatureClasses ("*", "all") FC = FCList.Next() while FC: gp.Analyze_management(FC, "BUSINESS;FEATURE;ADDS;DELETES") print gp.GetMessages() + "\n" output.write(gp.GetMessages()+ "\n") FC = FCList.Next() # Loop through and analyze all the Feature classes gp.Workspace = analyzeworkspace FDList = gp.ListDatasets ("*", "all") FD = FDList.Next() while FD: gp.Analyze_management(FD, "BUSINESS;FEATURE;ADDS;DELETES") print gp.GetMessages() + "\n" output.write(gp.GetMessages()) FD = FDList.Next() # Loop through and analyze all the Tables. # The if-else statements set the script to skip over Multi-Versioned Views. gp.Workspace = analyzeworkspace TBList = gp.ListTables ("*", "all") TB = TBList.Next() while TB: if '_MVVIEW' in TB: print "Skipping Multi-Versioned View" elif '_MVView' in TB: print "Skipping Multi-Versioned View" else: gp.Analyze_management(TB, "BUSINESS;FEATURE;ADDS;DELETES") print gp.GetMessages() + "\n" output.write(gp.GetMessages()) TB = TBList.Next() except: print gp.GetMessages() output.write(gp.GetMessages()) #Sets up the email parameters From = "Geoprocessor" To = ["your_email@domain.com"] Date = time.ctime(time.time()) Subject = "Error Analyzing the GIS Database" Text = gp.GetMessages() #Format mail message mMessage = ('From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s\n' % (From, To, Date, Subject, Text)) print 'Connecting to Server' s = smtplib.SMTP('machinename.domainname.com') #Send Email rCode = s.sendmail(From, To, mMessage) s.quit() if rCode: print 'Error Sending Message' else: print 'Message sent sucessfully' # Sets the Date & Time since the script started. Date = time.strftime("%m-%d-%Y", time.localtime())# Set the date. Time = time.strftime("%I:%M:%S %p", time.localtime()) # Set the time. output.write(str("Process completed at " + str(Date) + " " + str(Time) + "." + "\n")) # Write the start time to the log file. output.close() # Closes the log file. print "Process completed at " + str(Date) + " " + str(Time) + "."
Esri 相关系列文章:
HowTo: Automate reconcile, post and compress processes
-------------------------------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------
相关文章推荐
- 怎么才能实现真正的ArcGIS版本压缩(Compress) - ArcGIS技术研究
- ArcGIS版本压缩(Compress)报ORA-00001: unique constraint 的解决方法
- 怎么用pdf压缩软件简单实现pdf压缩
- 万恶的单线程!!怎样才能实现一个真正的多线程的php socket server啊!!!
- ArcSDE版本压缩(Compress)(2)
- PHP gzcompress 压缩,java实现gzuncompress
- Python实现批量执行ArcGIS版本的协调和提交 - ArcGIS技术研究 - 博客频道 - CSDN.NET
- 使用HttpClient进行资源下载和压缩,提供终端版本和web版本实现
- [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现
- 网站怎么做才能够真正的留住用户?
- ArcSDE版本压缩(compress)(3)
- 使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
- smarty-3.1.30版本registerPlugin方法怎么实现局部不缓存
- 梳理版本Version、压缩compress、归档archiving
- 关于fragment到底是否可见的问题 以及 什么时候调用才能真正意义上实现可见加载
- 我们什么时候才能实现真正的人工智能?
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- 3D MAX高版本的文件怎么保存才能在低版本中打开
- 怎么才能取消和实现XP/windows 7自动登陆
- 怎么才能使得DATAGRIDVIEW实现如下图的功能?