澳门在线威尼斯官方 > 电脑数据库 > Server查看视图定义计算,Server元数据损坏

原标题:Server查看视图定义计算,Server元数据损坏

浏览次数:136 时间:2019-09-25

 

 

在SQL Server中怎么样查看数据库视图的定义呢? 其实官方文书档案已经有一个较详细的下结论了,这里在官方文书档案的基本功上,大家再深远拓宽解析一下,举个例子如何赢得系统视图的定义。知其然知其所以然吗。

在提高一个SQL Server 两千的数据库时,蒙受了一致性错误,当中有多少个谬误是元数据损坏(metadata corruption),特意商量了一晃那几个案例,因为从前也零零散散的相遇过局地一致性相关错误,不过难得遭遇元数据损坏的案例。

 

 

1:使用SQL Server Management Studio(SSMS)

如下所示,数据库从SQL Server 3000还原到SQL Server 二零一零自此,在做一致性检查时,开采有元数据损坏(metadata corruption),上边是试验是结构的一个测量检验景况

 

 

在“对象财富管理器”中,首先找到相应数据库中要求查阅定义的视图,右键单击获取对象的定义脚本。这种艺术极度简单。在此略过。

DBCC CHECKCATALOG (TEST) WITH NO_INFOMSGS;

GO

 

DBCC CHECKDB(TEST) WITH NO_INFOMSGS;

GO

 

 

 

 

2:通过脚本查看视图的定义。

Msg 8992, Level 16, State 1, Line 1

 

Check Catalog Msg 3853, State 1: Attribute (object_id=1362819917) of row (object_id=1362819917,parameter_id=1) in sys.parameters does not have a matching row (object_id=1362819917) in sys.objects.

 

Msg 8992, Level 16, State 1, Line 1

能够通过下边两种办法获取定义脚本,如下所示

Check Catalog Msg 3853, State 1: Attribute (object_id=1362819917) of row (object_id=1362819917,parameter_id=2) in sys.parameters does not have a matching row (object_id=1362819917) in sys.objects.

 

CHECKDB found 0 allocation errors and 2 consistency errors not associated with any single object.

USE YourSQLDba;  

GO  

SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound  

FROM sys.sql_modules  

WHERE object_id = OBJECT_ID('PerfMon.SessionInfo');   

GO  

 

 

 

 

 

USE YourSQLDba;  

GO 

SELECT OBJECT_DEFINITION (OBJECT_ID('PerfMon.SessionInfo')) AS ObjectDefinition;   

GO  

 

 

 

 

USE YourSQLDba;  

GO 

EXEC sp_helptext 'PerfMon.SessionInfo'; 

CHECKDB found 0 allocation errors and 2 consistency errors in database 'TEST'.

 

 

 

 

 

 

那么地点方式能够查阅系统视图的概念吗? 实验证实地度量试一下就可以见道。

图片 1

 

 

1:首先,在SSMS的“对象财富处理器”中是是无奈查看系统视图的定义的。SSMS直接屏蔽了有关职能。

 

 

 

2:上边二种脚本格局,sys.sql_modules 不能查看系统视图定义,内置函数OBJECT_DEFINITION、系统存款和储蓄进程OBJECT_DEFINITION可以查阅系统视图的概念。

 

 

那么我们先找到系统视图sys.parameters的多少来源于那些系统基础表(System Base-Table Metadata),如下脚本所示,大家能够找到sys.parameters 最后来自sys.syscolpars和 sys.sysobjvalues(关于怎么着收获系统视图定义,此处不做打开深入分析)

    图片 2

 

 

SET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

GO

CREATE VIEW sys.parameters AS

    SELECT object_id, name,

        parameter_id, system_type_id,

        user_type_id, max_length,

        precision, scale,

        is_output, is_cursor_ref,

        has_default_value, is_xml_document,

        default_value, xml_collection_id,

        is_readonly

    FROM sys.parameters$

    WHERE number = 1

 

GO

 

 

 

CREATE VIEW sys.parameters$ AS

    SELECT c.id AS object_id,

        c.number, c.name,

        c.colid AS parameter_id,

        c.xtype AS system_type_id,

        c.utype AS user_type_id,

        c.length AS max_length,

        c.prec AS precision,

        c.scale AS scale,

        sysconv(bit, c.status & 512) AS is_output,        -- CPM_OUTPUT

        sysconv(bit, c.status & 1024) AS is_cursor_ref,    -- CPM_CURSORREF

        sysconv(bit, isnull(v.objid, 0)) AS has_default_value,

        sysconv(bit, c.status & 2048) AS is_xml_document, -- CPM_XML_DOC        

        v.value AS default_value,

        xmlns AS xml_collection_id,

        sysconv(bit, c.status & 4194304) AS is_readonly -- CPM_IS_READONLY = 0x00400000

    FROM sys.syscolpars c

    LEFT JOIN sys.sysobjvalues v ON v.valclass = 9 AND v.objid = c.id AND v.subobjid = c.colid AND v.valnum = 0    -- SVC_PARAMDEFAULT

    WHERE number > 0 AND has_access('CO', c.id) = 1

 

 

系统视图不可能查六柱预测应的系统定义是因为口径限制原因(has_access('CO', o.id) = 1),如下所示:

 

 

然则系统基础表sys.syscolpars和sys.sysobjvalues在常规景况下是不可知的。独有在数据库专项使用管理员连接形式(DAC Dedicated Administrator Connection)连接下技术看得出。如下所示,能够剖断数据来自sys.syscolpars系统基础表。

SET QUOTED_IDENTIFIER ON

SET ANSI_NULLS ON

GO

CREATE VIEW sys.sql_modules AS

    SELECT object_id = o.id,

        definition = object_definition(o.id),

        uses_ansi_nulls = sysconv(bit, o.status & 0x40000),             -- OBJMOD_ANSINULLS

        uses_quoted_identifier = sysconv(bit, o.status & 0x80000),      -- OBJMOD_QUOTEDIDENT

        is_schema_bound = sysconv(bit, o.status & 0x20000),             -- OBJMOD_SCHEMABOUND

        uses_database_collation = sysconv(bit, o.status & 0x100000),    -- OBJMOD_USESDBCOLL

        is_recompiled = sysconv(bit, o.status & 0x400000),              -- OBJMOD_NOCACHE

        null_on_null_input = sysconv(bit, o.status & 0x200000),         -- OBJMOD_NULLONNULL

        execute_as_principal_id = x.indepid,

        uses_native_compilation = sysconv(bit, case when (o.type = 'P') then o.status & 0x00000200 else 0 end)    -- OBJPRC_HEKATON

    FROM sys.sysschobjs o

    LEFT JOIN sys.syssingleobjrefs x ON x.depid = o.id AND x.class = 22 AND x.depsubid = 0 -- SRC_OBJEXECASOWNER

    WHERE o.pclass <> 100 -- x_eunc_Server

        AND ((o.type = 'TR' AND has_access('TR', o.id, o.pid, o.nsclass) = 1)

            OR (type IN ('P','V','FN','IF','TF','RF','IS') AND has_access('CO', o.id) = 1)

            OR (type IN ('R','D') AND o.pid = 0))

        AND (o.status2 & 0x00000020) = 0

 

GO

 

 

 

   

图片 3

    图片 4

 

 

 

 

那时就算在专项使用管理员连接上面也是不可能删除那一个数据的,会报“Ad hoc update to system catalogs is not supported”,对应汉语提示为“不协理对系统目录进行即席更新”。如下所示:

   

 

    图片 5

 

 

EXEC sp_configure 'allow_updates', 1;

 

RECONFIGURE WITH OVERRIDE;

假若您到这一步认为就结束了的话,那么你太天真了。内置函数OBJECT_DEFINITION、系统存款和储蓄进度OBJECT_DEFINITION对于有个别视图也心有余而力不足。如下所示,获取系统视图sys.parameters的概念如下。

GO

CREATE VIEW sys.parameters

AS

    SELECT  object_id ,

            name ,

            parameter_id ,

            system_type_id ,

            user_type_id ,

            max_length ,

            PRECISION ,

            scale ,

            is_output ,

            is_cursor_ref ,

            has_default_value ,

            is_xml_document ,

            default_value ,

            xml_collection_id ,

            is_readonly ,

            is_nullable

    FROM    sys.parameters$

    WHERE   number = 1

USE TEST;

 

GO

本文由澳门在线威尼斯官方发布于电脑数据库,转载请注明出处:Server查看视图定义计算,Server元数据损坏

关键词:

上一篇:没有了

下一篇:没有了