我创建了一个用游标重建索引的过程。我没有正确执行,而是收到一条错误消息:
消息 2812,级别 16,状态 62
找不到存储过程
该怎么做才能摆脱这种情况呢?
USE [ACT]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[myProcedure]
AS
BEGIN
DECLARE @idx_name VARCHAR(200) -- Index name
DECLARE @tableName VARCHAR(256) -- Table Name
DECLARE @sql varchar(500)
DECLARE Index_Rebuild_Cursor CURSOR FOR
SELECT OBJECT_NAME(ps.OBJECT_ID)tbl_name,b.name idx_name
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS ps
INNER JOIN sys.indexes AS b ON ps.OBJECT_ID = b.OBJECT_ID
AND ps.index_id = b.index_id
WHERE ps.avg_fragmentation_in_percent>80
OPEN Index_Rebuild_Cursor
FETCH NEXT FROM Index_Rebuild_Cursor INTO @tableName,@idx_name
WHILE @@FETCH_STATUS = …Run Code Online (Sandbox Code Playgroud) 这里有点令人头疼。
我有一个数据少于 1GB 的数据库,但有一个 40GB 的日志文件。事务日志每天备份,这个数据库没有很多活动;大约每周一次,它记录新的工资单信息,然后为报告目的反刍这些数据。数据库设置为自动收缩。
运行sp_spaceused @updateusage = true产生以下信息:
database_name database_size unallocated space
PayrollImports 39412.06 MB 105.00 MB
reserved data index_size unused
321728 KB 278640 KB 42816 KB 272 KB
Run Code Online (Sandbox Code Playgroud)
运行DBCC shrinkfile (N'PayrollImports_log', 1 , notruncate)产生以下结果:
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
19 2 4991088 3456 4991088 3456
Run Code Online (Sandbox Code Playgroud)
...之间的差异UsedPages和EstimatedPages被神秘,但我继续DBCC shrinkfile (N'PayrollImports_log', 1 , truncateonly),并得到:
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
19 2 4991088 3456 4991088 3456
Run Code Online (Sandbox Code Playgroud)
在这一点上没有任何改变。日志文件仍然是 40GB。所以我想,也许我有一些公开的交易。运行dbcc …
我有一台带有以下内容的 SQL Server 机器:
我将最大服务器内存使用量设置为我认为可接受的值(合计约 10GB,为 Windows 留出 2GB)。我使用以下查询来显示缓冲池和非缓冲池的总 RAM 使用量。我还展示了 MAX SERVER MEMORY 设置。每个实例上的数据库都比分配的 RAM 大得多,即使有几个实例比其他实例得到了更多的使用。实际使用的内存不应该总是非常接近 MAX SERVER MEMORY 设置吗?我发现了一个让我好奇的差距。
DECLARE @TotalRam as decimal (10,2)
--NON-BUFFER POOL
SET @TotalRam = (SELECT sum(pages_allocated_count)/128.0 [Non-Buffer (MB)]
from sys.dm_os_memory_cache_entries
where pages_allocated_count > 0)
--BUFFER POOL
SET @TotalRam = @TotalRam + (
SELECT CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2)) AS [Buffer Pool …Run Code Online (Sandbox Code Playgroud) 我有一个查询,让我知道有关备份的基本信息。我有几个 SQL 服务器,我希望能够一次查询。是否可以同时在多台服务器上运行以下查询?
SELECT
A.[Server],
A.database_name,
A.last_db_backup_date,
B.backup_type,
B.backup_start_date,
B.expiration_date,
B.backup_size,
B.logical_device_name,
B.physical_device_name,
B.backupset_name,
B.description
FROM
(
SELECT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
msdb.dbo.backupset.database_name,
MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
GROUP BY
msdb.dbo.backupset.database_name
) AS A
LEFT JOIN
(
SELECT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupset.backup_finish_date,
msdb.dbo.backupset.expiration_date,
msdb.dbo.backupset.backup_size,
msdb.dbo.backupmediafamily.logical_device_name,
msdb.dbo.backupmediafamily.physical_device_name,
msdb.dbo.backupset.name AS backupset_name,
msdb.dbo.backupset.description,
CASE msdb..backupset.type
WHEN 'D' THEN 'Full Database'
WHEN 'L' THEN 'Log'
WHEN 'I' THEN 'Differential'
WHEN 'F' THEN 'File Level' …Run Code Online (Sandbox Code Playgroud) 我的任务是“重建”一个数据库服务器,因为旧的正在消亡。为了减少新服务器的可能性,我们决定重建与旧服务器尽可能相似的服务器,因此,在 Windows Server 2003 之上的 SQL Server 2005 Enterprise。
现在,旧服务器的原始开发/维护人员已经走上了渡渡鸟的路(例如,他很久以前离开了公司,现在无处可寻)。因此,我们必须进行整体迁移。
更糟糕的是,旧服务器是一个大杂烩:数据库、混合用户凭据(SQL Server 身份验证和Windows 身份验证)、一群链接服务器和一群 SQL Server 代理作业。
那么,我该如何处理这项艰巨的任务呢?在我看来,我有以下半生不熟的计划:
对于上面的每一步,我可能都必须一个一个地完成:(
是否有更简单(例如,不那么乏味)的方法来进行迁移?
sSQL = "
SELECT ordID, ordName, ordDate, ordShipping, ordStateTax,
ordHandling, ordTotal, ordDiscount, ordPrivateStatus
FROM orders
WHERE (ordStatus = 7)
"
Run Code Online (Sandbox Code Playgroud)
我想将昨天收到的订单显示为我正在构建的每日报告脚本
我该怎么办?
SQL Server 2005
ordDate 有这种格式: 2015-01-28 14:58:49.000
我运行了一个数据库引擎优化顾问会话DTA 来优化我的数据库。
DTA 提出了一些统计建议,但是,我注意到有些包含在其他中,例如在我下面的表 ProductIcon 中:
CREATE STATISTICS [_dta_stat_172123954_1_2_3_4_5_12]
ON [dbo].[ProductIcon]
([ClassID], [SegmentID], [GroupID], [Tier1], [LanguageID], [Active])
go
CREATE STATISTICS [_dta_stat_172123954_11_1_2_3_4_5_12]
ON [dbo].[ProductIcon]
([IconTypeID], [ClassID], [SegmentID], [GroupID], [Tier1], [LanguageID], [Active])
go
Run Code Online (Sandbox Code Playgroud)
这是表定义:
IF OBJECT_ID('[dbo].[ProductIcon]') IS NOT NULL
DROP TABLE [dbo].[ProductIcon]
GO
CREATE TABLE [dbo].[ProductIcon] (
[ClassID] INT NOT NULL,
[SegmentID] INT NOT NULL,
[GroupID] INT NOT NULL,
[Tier1] VARCHAR(10) NOT NULL,
[LanguageID] SMALLINT NOT NULL CONSTRAINT [DF_ProductIcon_LanguageID] DEFAULT ((1)),
[Image] VARCHAR(50) NOT NULL CONSTRAINT [DF_ProductIcon_Image] DEFAULT (''),
[Descr] …Run Code Online (Sandbox Code Playgroud) 我想查询如何在我已经尝试过使用 select * from dba_tables where owner='HR' and num-rows is null 的架构 HR 中找到所有空表;但我不知道这是否是正确的逻辑
我有一个名为 Folder 的表,其中包含 3 个字段:Id (PK)、Name、UserId (FK)
另一个名为 User 的表有两个字段:Id (PK), UserName
我正在尝试运行此 sql:
truncate table Folder
truncate table User
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Cannot truncate table 'Folder' because it is being referenced by a FOREIGN KEY constraint.
Cannot truncate table 'user' because it is being referenced by a FOREIGN KEY constraint.
Run Code Online (Sandbox Code Playgroud)
...即使在删除两个表中的所有记录后,我也得到了这个。为什么我不允许截断我的表格?
如果现在有办法在 pk/fk 关系表上运行截断,我如何在不使用截断的情况下轻松重置 PK 的种子?
编辑:添加了数据库图

我正在寻找解决方案:
我尝试创建一个存储过程而不是调用另一个存储过程,但它没有用。欢迎任何想法......
sql-server-2005 ×10
sql-server ×6
maintenance ×1
memory ×1
migration ×1
optimization ×1
statistics ×1