sql server中有行迁移现象吗

sql server中有行迁移现象吗,第1张

有的,和oracle一样,SQL中也有行迁移

行迁移记包含forwarding_stub 和forwarded 两种类型。这两类记录是因为数据页不能容纳更新后的记录而产生的,不是因为记录长度超过8060B引起的,所以这两类记录依然是行内记录,与行溢出记录是不同的。

这两种记录总是成对出现的,当出现forwarding_stub时,在别的页面中一定有与之对应的一条forwarded记录。

forwarding记录也叫forwarding_stub记录,记录头标志为0x04,它是一条完整的数据记录。虽然结构看起来特殊,但还是符合一般记录的结构,记录中主要内容就是在行中用8字节保存了指向移出后的记录的位置指针。

forwarded 记录,有时直接叫做迁移记录。记录头部标志为0x32. 它也是一条完整记录,格式跟一般记录略有差异,大体结构还是相同的。这里是存储了溢出前的那条记录的真实数据。

这两种记录的具体存储结构比较简单和直观,其逻辑结构会在下面的实例列举中结合具体数据记录来分析说明。

测试这种的方法太长了,不在这里具体列出,你可以到51CTO里面找一下,搜索SQL行迁移有具体的测试方法

sqlserver数据库迁移的几种方式

方法一:将\Microsoft SQL Server\MSSQL\DATA文件夹中的syntt_data.mdf和syntt_log.ldf文件复制到安装有数据库服务器的机器的文件夹中(可以是本机的\Microsoft SQL Server\MSSQL\DATA\文件夹),然后进入企业管理器。

右键点击“数据库”,在浮动菜单中选择“所有任务”中的“附加数据库”。在随后的提示页面中选择刚才复制过来的.MDF文件,如果想指定数据库的所有者,在“指定数据库所有者”选择框中选择你认为合适的用户。

如果想修改数据库的名字,可在“附加为”框中输入新的数据库名字(对本数据库,不建议这么做,因为这样的话,整个程序中所有涉及数据库连接的代码都要随之修改,那将是不必要的劳动)。在进行完上述的工作之后,直接点击“确定”就可进行数据的SQL Server 数据转移转移。

方法二:(方法一)是针对数据库中没有本数据库的服务器,如果数据库中已经建有与该数据库名称相同的数据库,则直接按照备份数据库的恢复 *** 作就可完成数据的SQL Server 数据转移转移。方法如下所述:这种方法首先要在本机上建立一个备份文件,具体 *** 作介绍如下:1、 在企业管理器中打开服务器组以及指定的服务器。

然后右键点击需要备份的数据库在这里是syntt,在浮动菜单中选择“所有任务”菜单下的“备份数据库”,打开数据备份对话框。2、 选择“常规”选项卡,在名称对话框中输入本分 *** 名称,在“描述”文本框中输入备份集描述文本信息。

在“备份”组下选择备份 *** 作类型,共有以下几种:数据库—完全:完整备份数据库。数据库—差异:增量备份数据库。

事务日志:事务日志备份。文件和文件组:数据库文件和文件组备份。

在“目的”组中指定备份设备或者备份文件名称,选择“添加”按钮添加备份设备或者文件;“删除”按钮用来删除备份设备和备份文件;选择“内容”按钮,则可查看已经存储在备份设备或文件中的备份信息。在“重写”组中有两种选项:追加到媒体:选择该选项,表示需要保存备份设备或文件中以前的备份数据。

重写现有媒体:要求本次被分数据覆盖以前的备份数据,从而节省存储空间。在“调度”组中,安排数据备份的时间。

用来指定数据库备份在将来的某个时间执行3、 “选项”选项卡,设置数据库备份 *** 作选项。其中的内容主要有以下几项:完成后验证备份:要求在备份结束时对备份数据进行校验。

备份后d出磁带:只对磁带备份设备有效,他要求在备份结束时自动卸带。删除事务日志中不活动的条目:要求在事务日志备份结束时删除事务日志中的已经完成的事务日志条目。

检查媒体集名称和备份集到期时间:要求在备份前检查介质集名称和原备份集中备份SQL Server 数据转移的有效期,以防止意外重写破坏原来的备份数据。备份集到期时间:设置备份集的有效期。

初始化并标识媒体:只对磁带设备有效。选择该选项后,SQL Server在备份时将Microsoft定义的磁带格式信息写入介质的开始部分。

此时,可以在“媒体集名称”和“媒体集描述”文本框中定义介质集名称和介质描述信息。4、 在进行完上述的 *** 作之后,剩下的任务就是点击“确定”,使系统开始进行数据库的备份 *** 作。

到目前为止,我们已经有了一个数据库的备份文件,剩下的任务就是怎么将这个文件还原至另外的数据库服务器中了。1、因为使用企业管理器进行数据库的恢复只能是在本机进行,所以在进行数据还原之前,必须将刚才所作的备份文件复制到本机,然后在本机选择“syntt”数据库,右键点击它,在显示出来的浮动菜单中选择“所有任务”下的“还原数据库”。

2、在还原数据库对话框中,在“常规”选项卡中的选择“从设备”的数据恢复方法,通过“选择设备”按钮选择刚才复制过来的文件。“常规”选项卡与“选项”选项卡中的具体内容如下所示:“常规”选项卡:数据库恢复方法:包括“数据库”、“文件组或文件”、“从设备”三种恢复方式。

“数据库”方式:选择该项时,从“显示数据库备份”列表中选择需要显示的指定数据库备份 *** ,从“要还原的第一个备份”列表框中选择首先使用哪一个备份集恢复数据库;“文件组或文件”:选择它时,数据库恢复部件列出指定数据库备份 *** 中备份的数据库文件或文件组,管理员可从这些备份文件中选择恢复那个数据库文件或文件组;“从设备”:选择它时,管理员选择恢复数据库或其日志所使用的备份设备,之后再从该备份设备中选择使用哪一次备份中的数据恢复数据库或其日志。3、点击“确定”,完成恢复 *** 作。

非原创。

sql server中有行迁移现象吗

有的,和oracle一样,SQL中也有行迁移行迁移记包含forwarding_stub 和forwarded 两种类型。

这两类记录是因为数据页不能容纳更新后的记录而产生的,不是因为记录长度超过8060B引起的,所以这两类记录依然是行内记录,与行溢出记录是不同的。这两种记录总是成对出现的,当出现forwarding_stub时,在别的页面中一定有与之对应的一条forwarded记录。

forwarding记录也叫forwarding_stub记录,记录头标志为0x04,它是一条完整的数据记录。虽然结构看起来特殊,但还是符合一般记录的结构,记录中主要内容就是在行中用8字节保存了指向移出后的记录的位置指针。

forwarded 记录,有时直接叫做迁移记录。记录头部标志为0x32. 它也是一条完整记录,格式跟一般记录略有差异,大体结构还是相同的。

这里是存储了溢出前的那条记录的真实数据。 这两种记录的具体存储结构比较简单和直观,其逻辑结构会在下面的实例列举中结合具体数据记录来分析说明。

测试这种的方法太长了,不在这里具体列出,你可以到51CTO里面找一下,搜索SQL行迁移有具体的测试方法。

sql server中有行迁移现象吗

有的,和oracle一样,SQL中也有行迁移

行迁移记包含forwarding_stub 和forwarded 两种类型。这两类记录是因为数据页不能容纳更新后的记录而产生的,不是因为记录长度超过8060B引起的,所以这两类记录依然是行内记录,与行溢出记录是不同的。

这两种记录总是成对出现的,当出现forwarding_stub时,在别的页面中一定有与之对应的一条forwarded记录。

forwarding记录也叫forwarding_stub记录,记录头标志为0x04,它是一条完整的数据记录。虽然结构看起来特殊,但还是符合一般记录的结构,记录中主要内容就是在行中用8字节保存了指向移出后的记录的位置指针。

forwarded 记录,有时直接叫做迁移记录。记录头部标志为0x32. 它也是一条完整记录,格式跟一般记录略有差异,大体结构还是相同的。这里是存储了溢出前的那条记录的真实数据。

这两种记录的具体存储结构比较简单和直观,其逻辑结构会在下面的实例列举中结合具体数据记录来分析说明。

测试这种的方法太长了,不在这里具体列出,你可以到51CTO里面找一下,搜索SQL行迁移有具体的测试方法

SQL数据库如何自动备份和恢复

一、备份数据库

1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server

2、SQL Server组-->;双击打开你的服务器-->;双击打开数据库目录

3、选择你的数据库名称(如论坛数据库Forum)-->;然后点上面菜单中的工具-->;选择备份数据库

4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份

二、还原数据库

1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server

2、SQL Server组-->;双击打开你的服务器-->;点图标栏的新建数据库图标,新建数据库的名字自行取

3、点击新建好的数据库名称-->;然后点上面菜单中的工具-->;选择恢复数据库

4、在d出来的窗口中的还原选项中选择从设备-->;点选择设备-->;点添加-->;然后选择你的备份文件名-->;添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->;然后点击上方常规旁边的选项按钮

5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是zw0001.mdf,现在的数据库是zw0002,就改成zw0002.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:\sqldata\zw0002.mdf或者d:\sqldata\zw0002.ldf),否则恢复将报错

6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL *** 作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复 *** 作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复

如何设置才能使sql每半小时备份一次

SQL Server数据库备份工具 2.2

数据库使用过程中历史表记录的增多数据库的增大导致以下问题的出现

1 数据库性能大幅下降

2 报表生成等要求数据库大数据量 *** 作时导致数据库响应短暂停止甚至完全停止响应

3 数据库备份或同步等数据库维护时间加长

本程序为绿色软件无需安装, 正确配置参数后即可运行,通过使用备份计划(可配置)定时将数据库中历史表的历史记录转移到备份机器上,减小生产机运行数据库,转移报表生成等大幅占用数据库 *** 作到备机以减小生产机压力

实现说明:

1 增加一台备份机器

2 备机上建立一个还原库用以还原当前数据库的备份和一个历史库用以保存历史数据

3 根据调度计划定时将当前生产机数据库备份到备机

4 还原备机还原库并将还原库中新增或更新数据导入备机历史库,目的为尽量少的占用当前数据库而使用备机资源

5 删除生产机数据库中已成功转移的历史数据

6 删除使用过的文件和清理数据库日志,减少磁盘占用

特点:

1 所有参数可配置

2 占用生产机数据库资源少, 仅备份 *** 作(历史表数据转移后备份时间大大减短且大多数情况下仅进行差异备份)

3 *** 作速度快,且费时 *** 作部分都基本在备机,不占用生产机资源

4 自动备份当前数据库日志和截断备份机器上数据库日志

5 自动删除使用过的文件,减少磁盘空间占用

6 整个 *** 作过程提供详细错误日志以方便维护

7 与SQL SERVER自带的发布订阅功能不同,历史数据只在备机上保留一份(如需备份备机历史数据请自行解决或定制此需求),生产机数据库只保留有生产必须的数据量即可,可尽可能的减少当前生产机数据库的数据量减少资源占用,将历史数据转移到备机上

8 无需更改现有系统

9 和其他备份程序的区别:主要针对历史数据转移需求,数据库备份只是一个前提,转移历史数据减小生产机数据库压力才是此程序的实质

升级说明:

1 去除所有标识部分,供公共使用

2 延长一次运行时间限制到30天

附:

1 如果有意请联系public_release@sina

2 可提供源代码(vc)和实现其他定制需求

3 此共享发布程序每次运行限制为30天(可放开),请不要相信其他的所谓破解版,实为其他非善意软件的安装程序包,如果不想有一次运行30天的限制,使用额外的程序在29天时关闭程序后重新启动即可

如何查询SQL Server备份还原历史记录

SQL Server在msdb数据中维护了一系列表,用来存储执行所有备份和还原的细节信息。即使你正在使用第三方的备份应用程序,只要这个应用程序使用SQL Server的虚拟设备接口(Virtual Device Interface---VDI)来执行备份和还原执行,那么执行细节依然被存储在这一系列表中。

存储细节的表包括:

backupset

backupfile

backupfilegroup (SQL Server 2005 upwards)

backupmediaset

backupmediafamily

restorehistory

restorefile

restorefilegroup

logmarkhistory

suspect_pages (SQL Server 2005 upwards)

你可以在Books Online里面找到上面这些表的具体说明。

下面这个脚本可以帮你找出每个数据库近期的备份信息:

SELECT b.name, a.type, MAX(a.backup_finish_date) lastbackup

FROM msdb..backupset a

INNER JOIN master..sysdatabases b ON a.database_name COLLATE DATABASE_DEFAULT = b.name COLLATE DATABASE_DEFAULT

GROUP BY b.name, a.type

ORDER BY b.name, a.type

指定数据库最后20条事务日志备份信息:

SELECT TOP 20 b.physical_device_name, a.backup_start_date, a.first_lsn, a.user_name FROM msdb..backupset a

INNER JOIN msdb..backupmediafamily b ON a.media_set_id = b.media_set_id

WHERE a.type = 'L'

ORDER BY a.backup_finish_date DESC

指定时间段的事务日志备份信息:

SELECT b.physical_device_name, a.backup_set_id, b.family_sequence_number, a.position, a.backup_start_date, a.backup_finish_date

FROM msdb..backupset a

INNER JOIN msdb..backupmediafamily b ON a.media_set_id = b.media_set_id

WHERE a.database_name = 'AdventureWorks'

AND a.type = 'L'

AND a.backup_start_date >'10-Jan-2007'

AND a.backup_finish_date

数据库物理模型设计的目标是根据选定的Oracle数据库系统特点和航空物探数据管理与服务的业务处理需求,确定航空物探数据库最优的物理环境、存取方法和存储结构。即通过数据库物理设计,以便达到物理数据库结构的优化,使得在数据库上运行的各种事务响应时间少、存储空间利用率高、事务吞吐率大。

一、数据库布局

航空物探信息系统的维护数据(部门、岗位、人员、人员权限、数据入库检查规则及数据字典等)相对比较稳定。入库前数据需经过各种检查校对,确认数据正确后才能归档,存入航空物探资料数据库,所以存入资料库前的数据可能经常需要修改和删除,相对变化较大而存入资料数据库中的数据一般不允许修改和删除,以免误 *** 作破坏资料库数据造成损失。

图2-12 航空物探数据库逻辑模型

图2-13 航空物探数据库布局与数据采集流程图

据此,我们采用图2-13所示的数据库数据采集流程,并将航空物探数据库分为资料采集数据库、资料数据库、系统维护数据库分别进行存储和管理,实现数据的统一管理和统一使用,便于数据入库和易于维护等。

航空物探资料数据库是航空物探所有数据最终存储的场所。资料采集数据库是数据归档存入资料数据库前的临时“集散地”,在此接收各项检查,在确认数据无误后归档到资料数据库,然后删除资料采集数据库中已归档的数据。此外,资料采集数据库中还保存数据入库、维护、检查日志及归档记录。

系统维护数据库,存储系统维护信息(如系统功能、数据库表清单等)、安全信息(如信息系统用户的角色、权限、授权的系统功能等),数据字典、入库数据检查规则等。将其与航空物探数据分开,有利于系统维护和管理。

二、数据库空间设置

数据库空间设置包括磁盘空间设置、应用系统表空间设置、撤销表空间、临时表空间、日志空间和索引空间设置。

(一)磁盘空间设置

磁盘空间设置的目标:磁盘性能不能阻碍实现数据库性能,数据库磁盘必须专用于数据库文件,否则非数据库将会影响到数据库性能,且磁盘空间必须满足恢复和性能的要求。

航空物探数据库服务器为IBMP620小型机,8块硬盘,每块硬盘36GB空间,每块物理磁盘建立一个文件系统。为了提高磁盘的反应时间和寻道时间,提高I/O的存取效率,除了一块硬盘用于UNIX *** 作系统外,其余7块磁盘分别存放资料采集数据库、系统维护数据库-日志文件,资料数据库及资料数据库的大字段数据、索引、回滚段和数据日志文件。

(二)应用系统表空间设置

信息系统数据采集过程对数据的事务 *** 作比较频繁,经常进行数据插入(新数据入库)、修改(入库数据有误)和删除 *** 作(数据重新导入或归档入库),因此航空物探资料采集数据库所在的表空间会很活跃。为了不影响其他I/O的竞争,同时也可以提高数据入库的 *** 作效率(50多年的历史数据需要集中入库),分配一个磁盘空间(36GB)为采集库的表空间。由于采集数据归档入资料库后被删除,同时进行数据入库的项目也不是很多,虽仍保留所有的采集日志数据,一个磁盘空间也足够使用。

航空物探资料数据库的二维表和Oracle大字段(BLOB)分别存放在不同的物理磁盘(每个磁盘36GB)上,对同时存在有表格数据和大字段数据的数据库表(如航迹线数据)时,可以提高磁盘I/O效率。随着数据入库的项目越来越多,需要增加相应的物理磁盘或磁盘阵列。

系统维护数据库相对稳定,占用磁盘空间约500M左右。由于系统磁盘有限,把日志文件存放该磁盘中。

(三)撤销表和临时表空间的设置

在Oracle数据库中,撤销的目的是确保事务的回退和恢复。撤销参数有UNDO_MANAGEMENT、UNDO_TABLESPACE和UNDO_RETENTION。

UNDO_MANAGEMENT参数用于数据库中管理撤销数据的方式,航空物探数据库设置为自动模式(auto)。

UNDO_TABLESPACE参数用于指定数据库中保存撤销数据的撤销表空间名称,航空物探数据库撤销表空间名称为UNDO_ARGS_TBSPACE,空间大小设置为20GB,以确保在保留时间内进行恢复。

UNDO_RETENTION参数用于指定已经提交事务的撤销数据在能够覆盖之前应该保留多长时间,本数据库系统设置为60min。

临时表空间是用以存储大量的排序,与撤销表空间存放在一个物理磁盘上,本数据库系统临时表空间设置为500M。

(四)日志空间设置

日志的主要功能是记录对数据库已做过的全部 *** 作。在系统出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以不会丢失已有 *** 作结果。

日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,航空物探数据库系统分别在一个独立磁盘和系统维护库磁盘中存放日志文件。若系统出现故障,在下次打开数据库时Oracle数据库系统自动用日志文件中的信息来恢复数据库文件。

根据航空物探数据库信息系统同时登录的用户数及使用的功能,将日志文件大小设置为10GB。

(五)索引表空间设置

为了提高航空物探信息系统的查询和统计速度,把所有索引空间与应用表空间完全分开,从而提高I/O存取效率。航空物探索引表空间大小设置为10GB。

聚集是表的一种存储方法,一般每个基本表是单独组织的,但对逻辑上经常在一起查询的表,在物理上也邻近存放,这样可减少数据的搜索时间,提高性能。

当几个关系(表)以聚集方式组织时,是通过公共属性的值为表聚集的依据。航空物探数据库系统是以项目标识(PROJ_ID)建立聚集的,所有涉及项目标识的数据库表直接引用项目标识聚集。航空物探聚集表空间与索引表空间相同。

三、数据库参数设置

在数据库创建前需要对如下数据库参数进行设置,航空物探参数文件名为Inito-raargs.ora,各种参数设置如下:

DB_block_size=16384

DB_name=oraagrs

DB_domain=oraargs.com

Compatible=9.1.0

Nls_characterset=ZHS16GBK

Open_Cursors=100

DB_files=100

DB_file_mutliblock_read_count=16

Log_checkpoint_interval=256000

Processes=200

四、内存设置

航空物探数据库服务器物理内存为4GB,除部分用于系统开销外,其余全部用于数据库。

Oracle使用共享系统全局区(System Globla Area,SGA)内存来管理内存和文件结构,包含DB_block_Bufers、DB_cache_size、Shared_pool_size、Log_Buffer参数。航空物探数据库系统的全局区内存参数设置如下。

DB_block_Buffers参数为SGA中存储区高速缓存的缓冲区数目,每个缓冲区的大小等于参数DB_block_size的大小,DB_block_Buffers=19200(约300MB)。

Shared_pool_size参数为分配给共享SQL区的字节数,是SGA大小的主要影响者,Shared_pool_size=1228800000(1.2GB)。

DB_cache_size参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O,DB_cache_size=1024000000(1GB)。

Log_Bufer参数为重做日志高速缓存大小,主要进行插入、删除和修改回退 *** 作,Log_buffer=5120000(5MB)。

五、优化设置

由于航空物探信息系统的采集软件和应用软件是采用MS.NETC#进行开发的,应用程序与数据库之间的连接有传统的ODBC和OLEDB两种方式。为了支持ODBC在OLEDB技术上建立了相应的OLEDB到ODBC的调用转换,而使用直接的OLEDB方式则不需转换,从而提高处理速度。

在建立数据库表时,参数Pctfree和Pctused设置不正确可能会导致数据出现行链接和行迁移现象,即同一行的数据被保存在不同的数据块中。在进行数据查询时,为了读出这些数据,磁头必须重新定位,这样势必会大大降低数据库的执行速度。因此,在创建表时应充分估计到将来可能出现的数据变化,正确地设置这两个参数,尽量减少数据库中出现的行链接和行迁移现象。

航空物探资料采集数据库表的插入、修改和删除的频率较高,Pctfree设置为20,Pctused设置为40系统维护数据库表相对稳定,Pctfree设置为10,Pctused设置为15资料数据库表除了增加数据外基本不进行修改和删除 *** 作,Pctfree设置为10,Pctused设置为5。

六、扩展性设置

多CPU和并行查询PQO(Parallel Query Option)方式的利用:CPU的快速发展使得Oracle越来越重视对多CPU的并行技术的应用,一个数据库的访问工作可以用多个CPU相互配合来完成。对于多CPU系统尽量采用并行查询选项方式进行数据库 *** 作。航空物探数据库服务器为2个CPU,在程序查询中采用了并行查询的方式。

在航空物探工作量统计、飞行小时统计、测量面积统计和岩石物性统计中,为了加快统计效率,在相应的查询语句中增加了并行查询语句。

随着航空物探高精度测量程度的不断提高,测量数据将越来越大。为了满足航空物探查询效率及发展,将航磁测量数据与校正后航磁测量数据按比例尺分1:20万以下、20万~50万、1:50万以上分别存放3张不同的数据库表。

七、创建数据库

在完成数据库布局、空间设置、内存设置、数据库参数设置、扩展性设置和优化设置后,进行航空物探数据库物理模型设计,即航空物探数据库实体创建。由于航空物探空间数据库逻辑模型是采用ESRI提供的ArcGIS UML构建的Geodatabase模型,因此,使用ESRI公司提供的CaseTools将航空物探数据UML模型图转成空间数据库(Geodatabase)实体(图2-14)。

航空物探属性数据库表(二维表)是采用Power Designer数据库设计平台直接把数据库关系模型生成数据库脚本来创建的。

经过数据库的概念设计、逻辑设计和物理设计,最终生成航空物探数据库。

图2-14 航空物探数据库物理模型实现

八、空间数据的索引机制

对于海量的空间数据库而言,数据库的 *** 作效率是关系到数据库成败的关键问题。为了提高数据的访问、检索和显示速度,数据在加载到数据库时,要素类数据建立了空间索引,栅格数据构建了金字塔结构,对象类数据采用与数据库直接联接的访问机制。

(一)空间索引

为了提高要素类数据的查询性能,在建立航空物探空间数据库时,创建了空间索引机制。常用的空间索引有格网索引、R树索引、四叉树索引等。Geodatabase采用格网索引方式。所谓格网索引是将空间区域划分成适合大小的正方形格网,记录每一个格网内所包含的空间实体(对象)以及每一个实体的封装边界范围,即包围空间实体的左下角和右上角坐标。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后通过格网编号,就可以快速检索到所需的空间实体。

确定适合的格网级数、单元大小是建立空间格网索引的关键。格网太大,在一个格网内有多个空间实体,查询检索的准确度降低。格网太小,则索引数据量成倍增长和冗余,检索的速度和效率较低。数据库的每一数据层采用不同大小、不同级数的空间索引格网单元,但每层最多级数不能超过三级。格网单元的大小不是一个确定性的值,需要根据对象的大小确定。空间索引格网的大小与检索准确度之间的关系如图2-15所示。

选择格网单元的大小遵循下列基本原则:

1)对于简单要素的数据层,尽可能选择单级索引格网。减少RDBMS搜索格网单元索引的级数,缩短空间索引搜索的过程,例如航迹线要素类。

图2-15 索引格网大小与检索准确度的关系

2)如果数据层中的要素封装边界大小变化比较大,应选择2或3级索引格网。Geodata-base最多提供三级格网单元。每一要素封装边界在适合的级内,减少了每一封装边界有多个格网的可能性。在空间索引搜索过程中,RDBMS则必须搜索所有3个格网单元级,这将消耗大量的时间。

3)若用户经常对图层执行相同的查询,最佳格网的大小应是平均查寻空间范围的1.5倍。

4)格网的大小不能小于要素封装边界的平均大小,为了减少每个格网单元有多个要素封装边界的可能性,格网单元的大小应取平均格网单元的3倍。最佳格网单元的大小可能受图层平均查询的影响。

空间域是按照要素数据集定义的,空间索引格网是按照要素类设置的。它们都是在创建Geodatabase数据库时设置,并一经设置,中间不许改变所以一定要在充分分析数据的情况下确定它们的值。航空物探数据主要是简单要素类,空间跨度为70°。根据上述原则,航空物探数据选择单级索引格网,格网大小为20°。

(二)金字塔结构

金字塔结构的核心是将栅格数据逐级进行抽稀,形成多级分辨率的重采样数据,并将其分割成块,按一定的文件格式(金字塔文件格式)存储成磁盘文件在以后进行图像显示处理时,只需将要显示的部分所覆盖的块从磁盘文件直接读进内存缓冲区显示即可。从金字塔的所有层中寻找与所要求显示的比例相近或匹配的一层,并将该层的从某一点起的一定范围的图像所覆盖的所有块加载到内存缓冲区,提取所需部分并形成图像。

金字塔算法(图2-16)是通过获取显示时所需要的一定分辨率的数据来提高显示速度。使用金字塔数据格式后,在显示全图时仅需要显示一个较低分辨率的数据,这样既能加快显示速度,又不会影响显示效果。放大图像,尽管显示图像分辨率提高,由于显示区域减小,所以显示速度不会下降。如果没有为栅格数据建立金字塔数据,则每次显示都会读取整个数据,然后进行重采样得到显示所需要的分辨率,明显地降低了显示速度。

图2-16 金字塔压缩示意图

金字塔数据重采样方式有:最近邻法、双线性内插和立方卷积。其中最近邻法适用于离散数据,而双线性内插法和立方卷积法适合于连续数据。

在ArcGISEngine中提供了IRasterPyramid和IRasterPyramid2接口来实现金字塔数据的建立,而建立的数据保存在*.rrd格式的文件中。

(三)空间域定义

空间域是指数据的有效空间范围,即Geodatabase数据库的最大等效坐标的值域范围,其定义主要是指比例系数和MinX、MinY的计算。

因为使用整数比浮点数有更高的压缩率,并且对整数进行二进制搜索比较快,所以多用户Geodatabase以4字节正整数存储坐标,其最大值为32位正整数所能表示的范围是21.4亿(2147483647),整数的范围称为空间域。在创建Geodatabase数据库时需要定义合适的比例系数。大的整数值将消耗大量的计算机物理内存,所以选定的比例系数最好不要大于必须的比例系数。空间域随坐标系的单位变化而变化。

比例系数和空间域之间成反比例关系,比例系数越大(存储单位越小),表达的空间域也越小。为了使目标数据都存储在系统中,需要谨慎地设置比例系数。将目标数据的宽度和高度较适中的数值乘以比例系数,如果结果小于21.4亿,则比例系数是合适的。

航空物探数据模型是为我国的航空物探行业数据建库设计的,它支持的空间数据的坐标范围为我国领土覆盖的海陆空间,最低纬度为赤道。根据概念设计的分析,航空物探数据模型采用的是地理坐标系,坐标系单位是度,基准是Beijing_1954,要求存储的坐标数据精度达到0.01m。在赤道处,赤道圆周长为40075694.6m,则每度弧长=40075694.6×100/360cm=11132137.389cm,即1cm对应8.983000883E-8°。所以,航空物探数据模型的比例系数取为8.98E-8,即存储单位为8.98E-8°,可满足1cm精度要求。

将空间域移动到目标数据范围之前,首先找到空间域在存储单位的中心位置,目的是在必要时向各个方向扩展。4字节正整数可表示的坐标范围:2147483647×8.98E-8=192.84。我国的领土范围是东经70°~140°,北纬0°~60°。所以,选取的比例系数是合适的。把空间域坐标系中心定为90°,然后,计算空间域的MinX、MinY。

MinX=((70+140)÷2)-90=15

MinY=((0+60)÷2)-90=-60

所以坐标的存储数据是:

X_Storage=(X-MinX)/8.98E-8

Y_Storage=(Y-MinY)/8.98E-8


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10650085.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存