1、最起码的数据库相关的理论知识得了解。
创新互联建站是一家专注于成都网站建设、做网站与策划设计,南开网站建设哪家好?创新互联建站做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:南开等地区。南开做网站价格咨询:18982081108
2、标准的SQL语句得会,比如DDL、DML等语句,还有就是左连接右连接等。
3、sqlserver的一些基本知识(比如安装、版本、以及使用等)。
4、存储过程得会。
5、sqlserver相关的函数也得会。
其它的比如,要多了解一些其它的数据库,比如Oracle、mySql等,剩下就得慢慢积累了!
主要是看你学习sqlserver的目的,如果仅仅作为一个程序员或是只开发相关面向事务型的系统即使oltp(就是我们常说的mis系统或是其他一些只对数据库进行增删改查的系统)你只要学习sqlserver2000就可以了,因为他上手快,同时其他的数据库也都大同小异,如果你想以后做商业智能(BI)也就是更加提高一步的话,建议学习20005,因为2000和20005有个本质区别就是2005的商业智能 也就是多维分析(olap)这块要比2000做的好,同时功能也强大和其他厂商的相关专业BI工具有异曲同工之处。以上个人意见供参考
SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存储空间的浪费。可以通过数据库收缩技术对数据库中的每个文件进行收缩,删除已经分配但没有使用的页。从而节省服务器的存储的成本。
官方解释:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。
收缩后的数据库不能小于数据库最初创建时指定的大小。 或是上一次使用文件大小更改操作(如 DBCC SHRINKFILE)设置的显式大小。
比如:如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。
不能在备份数据库时收缩数据库。 反之,也不能在数据库执行收缩操作时备份数据库。
介绍:收缩指定数据库中的数据文件大小。
语法格式:
参数说明:
介绍:收缩当前数据库的指定数据或日志文件的大小,或通过将数据从指定的文件移动到相同文件组中的其他文件来清空文件,以允许从数据库中删除该文件。文件大小可以收缩到比创建该文件时所指定的大小更小。这样会将最小文件大小重置为新值。
语法格式:
参数说明:
例如,如果创建一个10MB 的文件,然后在文件仍然为空的时候将文件收缩为2 MB,默认文件大小将设置为2 MB。这只适用于永远不会包含数据的空文件。
另附SqlServer常见问题解答
1)管理器不会主动刷新,需要手工刷新一下才能看到最新状态(性能方面的考虑)
2)很少情况下,恢复进程被挂起了。这个时候假设你要恢复并且回到可访问状态,要执行:
RESTORE database dbname with recovery
这使得恢复过程能完全结束。
3)如果你要不断恢复后面的日志文件,的确需要使数据库处于“正在还原状态”,
这通常是执行下面命令:
RESTORE database dbname with norecovery
原来SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQL Server 服务器内存往往会占用很高。我们可以通过DBCC MemoryStatus来查看内存状态。
SQL SERVER运行时会执行两种缓存:
1. 数据缓存:执行个查询语句,SQL SERVER会将相关的数据页(SQL SERVER操作的数据都是以页为单位的)加载到内存中来, 下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。
2.执行命令缓存:在执行存储过程,自定函数时,SQL SERVER需要先二进制编译再运行,编译后的结果也会缓存起来, 再次调用时就无需再次编译。
可以调用以下几个DBCC管理命令来清理这些缓存:
但是,这几个命令虽然会清除掉现有缓存,为新的缓存腾地方,但是Sql server并不会因此释放掉已经占用的内存。SQL SERVER并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整SQL SERVER可用的物理内存设置来强迫它释放内存。
解决SQLSERVER内存占用过高的方法:
1、清除所有缓存DBCC DROPLEANBUFFERS
2、调整SQLSERVER可使用的最大服务器内存。
在SQL管理器,右击实例名称
在属性实例属性里面找到内存选项
把最大内存改成合适的内存,确定后内存就会被强制释放,然后重启实例。再看看任务管理器,内存使用率就降下来啦。
1、查看连接对象
USE master
GO
--如果要指定数据库就把注释去掉
SELECT * FROM sys.[sysprocesses] WHERE [spid]50 --AND DB_NAME([dbid])='gposdb'
当前连接对象有67个其中‘WINAME’的主机名,‘jTDS’的进程名不属于已知常用软件,找到这台主机并解决连接问题。在360流量防火墙中查看有哪个软件连接了服务器IP,除之。
2、然后使用下面语句看一下各项指标是否正常,是否有阻塞,正常情况下搜索结果应该为空。
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
DB_NAME([database_id]) AS '数据库名',
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50 AND DB_NAME(der.[database_id])='gposdb'
ORDER BY [cpu_time] DESC
查看是哪些SQL语句占用较大可以使用下面代码
--在SSMS里选择以文本格式显示结果
SELECT TOP 10
dest.[text] AS 'sql语句'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50
ORDER BY [cpu_time] DESC
3、如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
DB_NAME([database_id]) AS '数据库名',
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
der.[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
[dows].[waiting_tasks_count] AS '当前正在进行等待的任务数',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
INNER JOIN [sys].[dm_os_wait_stats] AS dows
ON der.[wait_type]=[dows].[wait_type]
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]50
ORDER BY [cpu_time] DESC;
4、查询CPU占用最高的SQL语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END - statement_start_offset)/2)
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC;
5、索引缺失查询
SELECT
DatabaseName = DB_NAME(database_id)
,[Number Indexes Missing] = count(*)
FROM sys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
ORDER BY 2 DESC;
SELECT TOP 10
[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, avg_user_impact
, TableName = statement
, [EqualityUsage] = equality_columns
, [InequalityUsage] = inequality_columns
, [Include Cloumns] = included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC;
找到索引缺失的表,根据查询结果中的关键次逐一建立索引。
你是不是把数据库服务器host与数据库database搞混了,在sql2000,数据库服务器host一般是电脑名或电脑IP,如果是本机,就是(local)。sql2000安装完成后,服务器下自带了几个数据库database,比如master, tempdb 等等。sa是用来登服务器的,连上服务器后当然也连上了数据库。
建多个sqlserver注册,就是连多个服务器。当然没问题。
就是一个在数据库中存在的,现实的数据库例子! 数据库实例就是后台进程和数据库文件的集合。 一个SQL Server服务器就是一个实例,2000支持在同一个NT/2000 Server操作系统装多个服务器,换言之,就是多个实例。 多个 SQL Server 实例 Microsoft® SQL Server™ 2000 支持在同一台计算机上同时运行多个 SQL Server 数据库引擎实例。每个 SQL Server 数据库引擎实例各有一套不为其它实例共享的系统及用户数据库。应用程序连接同一台计算机上的 SQL Server 数据库引擎实例的方式与连接其它计算机上运行的 SQL Server 数据库引擎的方式基本相同。 有两种类型的 SQL Server 实例: 默认实例 SQL Server 2000 数据库引擎默认实例的运行方式与 SQL Server 早期版本的数据库引擎相同。默认实例仅由运行该实例的计算机的名称唯一标识,它没有单独的实例名。如果应用程序在请求连接 SQL Server 时只指定了计算机名,则 SQL Server 客户端组件将尝试连接这台计算机上的数据库引擎默认实例。这保留了与现有 SQL Server 应用程序的兼容性。 一台计算机上只能有一个默认实例,而默认实例可以是 SQL Server 的任何版本。 命名实例 除默认实例外,所有数据库引擎实例都由安装该实例的过程中指定的实例名标识。应用程序必须提供准备连接的计算机的名称和命名实例的实例名。计算机名和实例名以格式 computer_name\instance_name 指定。 一台计算机上可以运行多个命名实例,但只有 SQL Server 2000 数据库引擎才可作为命名实例运行。SQL Server 早期版本中的数据库引擎不能作为命名实例运行。 实例主要应用于数据库引擎及其支持组件,而不应用于客户端工具。如果安装了多个实例,则每个实例都将获得各自唯一的一套: 系统和用户数据库。 SQL Server 和 SQL Server 代理服务。对于默认实例,服务名仍为 MSSQLServer 和 SQLServerAgent。对于命名实例,服务名改为 MSSQL$instancename 和 SQLAgent$instancename,使得这些服务与服务器上的其它实例分开启动和停止。可使用相关联的 SQL Server 服务启动和停止不同实例的数据库引擎。SQL Server 代理服务管理相关联的数据库引擎实例的调度事件。 与数据库引擎、SQL Server 和 SQL Server 代理服务相关联的注册表键。 使应用程序能连接特定实例的网络连接地址。 共享组件 以下组件可由运行于同一台计算机上的所有实例共享: 此计算机上只有一个 SQL Server 2000 程序组 (Microsoft SQL Server),以及由该程序组中的每个图标表示的唯一一个实用工具的复本。唯一一个 SQL Server 联机丛书的复本。 程序组中的实用工具版本来自计算机上最先安装的 SQL Server 2000 版本。例如,如果将 SQL Server 2000 简体中文版作为默认实例安装,然后将 SQL Server 2000 美国英语版作为命名实例安装,则只有一个 SQL Server 2000 程序组。该程序组中的所有实用工具图标和 SQL Server 联机丛书图标都将启动简体中文版的工具。 所有 SQL Server 2000 实用工具都能处理多个实例。可以从一个 SQL Server 2000 服务管理器的复本启动和停止每个实例。可使用一个 SQL Server 2000 SQL Server 企业管理器复本控制计算机上所有实例中的对象,使用一个 SQL Server 2000 服务器网络管理器复本管理计算机上所有实例的网络通讯地址。 仅有一个 MSSearchService 复本管理针对计算机上所有 SQL Server 实例的全文检索。 English Query 和 Microsoft SQL Server 2000 Analysis Services 服务器都只有一个复本。 与客户端软件相关联的注册表键在实例间不重复。 只有一个 SQL Server 开发库(包括 *.lib 文件)和示例应用程序的复本。 默认实例 可作为默认实例操作的配置包括: SQL Server 2000 的默认实例。 作为默认实例运行的 SQL Server 7.0 版安装。 作为默认实例运行的 SQL Server 6.5 版安装。 可使用 SQL Server 2000 vswitch 实用工具,与 SQL Server 6.5 版安装进行版本切换的 SQL Server 2000 默认实例。 可使用 SQL Server 7.0 版 vswitch 实用工具,与 SQL Server 6.5 版安装进行版本切换的 SQL Server 7.0 版安装。 说明 在同一台计算机上安装 SQL Server 2000 实例前,必须将 SQL Server 6.5 Service Pack 5 应用于所有 SQL Server 6.5 实例。 在 SQL Server 版本间切换 不能在 SQL Server 7.0 版安装和 SQL Server 2000 默认实例之间进行版本切换。 除了默认实例外,还可以拥有任意数量的 SQL Server 2000 命名实例。在运行命名实例前,无须在计算机上运行默认实例。在没有默认实例的计算机上可运行命名实例。SQL Server 6.5 版和 SQL Server 7.0 只能作为默认实例运行,不能作为命名实例运行。 在单台计算机或单个故障转移群集中,Microsoft 不支持超过 16 个实例。 如果在一台计算机上运行作为默认实例的 SQL Server 6.5 版和一个或多个 SQL Server 2000 命名实例,则该计算机将有两个 SQL Server 程序组,而非一个 SQL Server 程序组: SQL Server 2000 程序组执行 SQL Server 2000 工具。 SQL Server 6.5 版程序组运行 SQL Server 6.5 工具。 如果同时运行 SQL Server 7.0 版和 SQL Server 2000,则 SQL Server 7.0 程序组中的图标将执行 SQL Server 2000 工具。 说明 在同一台计算机上安装 SQL Server 2000 实例前,必须将 SQL Server 6.5 Service Pack 5 应用于所有 SQL Server 6.5 实例。