--1.日常要做数据库压缩--压缩日志及数据库文件大小/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
--*/1.清空日志
DUMP  TRANSACTION  库名  WITH  NO_LOG    2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(客户资料)

--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码: 
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

a.分离
EXEC sp_detach_db @dbname = 'pubs' b.删除日志文件

c.再附加
EXEC sp_attach_single_file_db @dbname = 'pubs', 
   @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

解决方案 »

  1.   

    就SQL本般来说,对数据文件大小的支持没有限制,只受可用资源的限制.
    而文件大小主要与磁盘分区格式有关,FAY16支持<=2G的文件,FAT32支持<=4G的文件.
    NTFS没有限制如果你一定要将图像数据放在数据库中,磁盘分区格式要用NTSF,并对数据库进行分割
      

  2.   

    分区
    将数据库分区可提高其性能并易于维护。通过将一个大表拆分成更小的单个表,只访问一小部分数据的查询可以执行得更快,因为需要扫描的数据较少。而且可以更快地执行维护任务(如重建索引或备份表)。实现分区操作时可以不拆分表,而将表物理地放置在个别的磁盘驱动器上。例如,将表放在某个物理驱动器上并将相关的表放在与之分离的驱动器上可提高查询性能,因为当执行涉及表之间联接的查询时,多个磁头同时读取数据。可以使用 Microsoft&reg; SQL Server&#8482; 2000 文件组指定将表放置在哪些磁盘上。硬件分区
    硬件分区将数据库设计为利用可用的硬件构架。硬件分区的示例包括: 允许多线程执行的多处理器,使得可以同时执行许多查询。换句话说,在多处理器上可以同时执行查询的各个组件,因此使单个查询的速度更快。例如,查询内引用的每个表可同时由不同的线程扫描。
    RAID(独立磁盘冗余阵列)设备允许数据在多个磁盘驱动器中条带化,使更多的读/写磁头同时读取数据,因此可以更快地访问数据。在多个驱动器中条带化的表一般比存储在一个驱动器上的相同的表扫描速度要快。换句话说,将表与相关的表分开存储在不同的驱动器上可以显著提高联接那些表的查询的性能。 
    水平分区
    水平分区将一个表分段为多个表,每个表包含相同数目的列和较少的行。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表代表特定年份内一个月的数据。任何需要特定月份数据的查询只引用相应月份的表。具体如何将表进行水平分区取决于如何分析数据。将表进行分区是为了使查询引用尽可能少的表。否则,查询时须使用过多的 UNION 查询来逻辑合并表,而这会削弱查询性能。有关查询水平分区的表的更多信息,请参见视图使用方案。 常用的方法是根据时期/使用对数据进行水平分区。例如,一个表可能包含最近五年的数据,但是只定期访问本年度的数据。在这种情况下,可考虑将数据分区成五个表,每个表只包含一年的数据。垂直分区
    垂直分区将一个表分段为多个表,每个表包含较少的列。垂直分区的两种类型是规范化和行拆分。规范化是个标准数据库进程,该进程从表中删除冗余列并将其放到次表中,次表按主键与外键的关系链接到主表。行拆分将原始表垂直分成多个只包含较少列的表。拆分的表内的每个逻辑行与其它表内的相同逻辑行匹配。例如,联接每个拆分的表内的第十行将重新创建原始行。与水平分区一样,垂直分区使查询得以扫描较少的数据,因此提高查询性能。例如有一个包含七列的表,通常只引用该表的前四列,那么将该表的后三列拆分到一个单独的表中可获得性能收益。应谨慎考虑垂直分区操作,因为分析多个分区内的数据需要有联接表的查询,而如果分区非常大将可能影响性能。
      

  3.   

    谢谢邹建。我也考虑了将图像文件存储在文件服务器上,在数据库上存储相关信息的方案。不过这番面不是很熟悉,怎样的一个设计方案比较的好呢?client端的文件如何传到文件服务器上,并将相关信息写入数据库,(这个应该是同步的,)
    如何修改/删除信息(数据库信息和文件),如何获取信息,如何维护数据库和文件服务器里的文件的同步。 通过ftp方式?或者其他?还望指教。
      

  4.   

    首先,一个SQL数据库可以由多个数据文件和日志文件组成.
    企业管理器--右键你的数据库--属性--在数据文件和/日志文件中,你就可以添加数据文件和日志文件,并且可以分组,数据文件可以指定到不同的分区.其次,创建表的时候,你可以设置表放在那个数据文件中,这样就把相当于把不同的表,放到了不同的分区.
    相关的慨念参考SQL联机帮助,上面有详细说明.
      

  5.   

    如果采用SQL server,图像信息存储在数据库里,当数据库达到几百GB的话,检索存取的速度怎么样啊,会不会非常的慢阿。如果以文件的形式存取的话,那存取的话,用什么方式好呢?
    用FTP?安全性可以保证吗?或者有其他相对必要安全方便的方案?
      

  6.   

    你是要一次性大批量传图片还是要长时间少量存储图片?如果是一次性大批量的建议打包用ftp传递,具体方法可以用aspx实现,并且有现成的例子可用,去.net板块问问如果是少量长时间的话可以用aps页里面的控件传递图片到服务器,具体方法同上