get a lever and pick any turtle: lifting with metadata

31
GET A LEVER AND PICK ANY TURTLE LIFTING WITH METADATA

Upload: cade-roux

Post on 08-Jul-2015

482 views

Category:

Technology


0 download

DESCRIPTION

Using SQL Server metadata and extended properties for code generation, documentation and system maintenance.https://bitly.com/bundles/caderoux/3

TRANSCRIPT

Page 1: Get a Lever and Pick Any Turtle: Lifting with Metadata

G E T A L E V E R A N D P I C K A N Y T U R T L E

L I F T I N G W I T H M E TA D ATA

Page 2: Get a Lever and Pick Any Turtle: Lifting with Metadata

EMA I L

WEB

Page 3: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 3

Give me the place to stand,

and I shall move the earth.

Page 4: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 4

Start Simple

Page 5: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 5

Scale

the

Technique

Page 6: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 6

Use

Basic

Concepts

Page 7: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 7

Expand

to

System

s

Page 8: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 8

Mixing Metaphors –

We’re Going Down a

Rabbit Hole

• Pam: And then outta

that cake pops another

stripper holding a

smaller cake and then

an even smaller

stripper pops outta that

one.

• Michael: What is that

smaller stripper

holding?

• Pam: A cupcake! It's

cupcakes and

strippers all the way

down.

Page 9: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 9

Avoid Injury

Page 10: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 10

Metadata has always been there

Codd Rule #0: The RDBMS

must use the relational

facilities to manage the

database

Page 11: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 11

Metadata has always been there

Codd Rule #4: There must be an

active online catalog based on the

relational model

Page 12: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 12

DBMeta

Demo

DBHealt

h

Page 13: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 13

Tables

SPs

Views

Page 14: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 14

• INFORMATION_SCHEMA contains tables and

views (ANSI 92, kind of generic RDBMS model,

doesn‟t expose a lot of implementation details)

• sys schema contains tables and views (more

proprietary, particularly non-portable things like

indexing features)

SQL Server Basic Metadata Services

Page 15: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 15

• You could make tables of additional information about database objects

• DON’T

• Built-in extended properties work great for this!

• MS_Description: Microsoft‟s standard “description” property

• sp_addextendedproperty, sp_updateextendedproperty, sp_dropextendedproperty

• fn_listextendedproperty

• sys.extended_properties

• I‟ll improve this in the DBMeta schema

SQL Server Extended Properties

Page 16: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 16

Layer this view on top of sys.extended_properties

to:

• Make it easier to use

• Give a standard naming convention

• Easier than CROSS APPLY

fn_listextendedproperty

DBMeta.Properties

Page 17: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 17

• Easier to use than sp_addextendedproperty,

sp_updateextendedproperty, sp_dropextendedproperty

• The builtin procs have some awkward hierarchy aspects:

e.g. a column or trigger is defined at level 2 where the table

is level 1

DBMeta.AddXP, UpdateXP, DropXP

Page 18: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 18

• With some simple tools we now have an easier way of dealing with the metadata in the extended properties

• This can be expanded at will to join regular base metadata information, PIVOT with the property information and combine them in interesting ways

• For instance, say your question was “I want to see NULLability (base metadata) of all money (base metadata) columns in tables in the Accounts subsystem (extended property) which have not been marked as reviewed. (extended property)” You can do that.

DBMeta

Page 19: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 19

• Some questions about the health of the database system will be very standard

• By health, I mean outside of integrity you can realistically enforce with constraints and beyond what you might use DDL triggers for

• Can we use the metadata to do something generally useful?

• Can we organize the health system using metadata so that it is self-maintaining as much a possible?

DBHealth

Page 20: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 20

• Let‟s create some data structures in

our Demo schema – some tables

and indexes

Demo Data

Page 21: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 21

• Arbitrary, but useful and chosen for variety

• Rule #1: All tables should be identified with a SUBSYSTEM (Organizational Rule)

• Rule #2: No unique indexes with columns which allow NULLs (Indexing Rule)

• Rule #3: No varchar(N) columns where N <= 2 (Table Design Rule)

• Rule #0: We only want to enforce these on schemas under management

Let’s Make Up Some DBA Rules

Page 22: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 22

• We simply make a view DBHealth.MonitoredSchemas

• We‟ll need to remember to use this view

• You could make a whole layer of views which filter through this, of course

Rule #0

Page 23: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 23

• Look for tables without extended

property „SUBSYSTEM‟

Rule #1

Page 24: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 24

• Look for unique indexes where any

of the columns in the index are

NULLable.

Rule #2

Page 25: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 25

• Find all varchar/nvarchar columns with

length <= 2

Rule #3

Page 26: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 26

• Let‟s tag things for exclusion with

extended properties!

What about exclusions?

Page 27: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 27

• How do we organize them?

• Could we put them in individual views or procedures to make them easy to use?

• Then make a master procedure which runs them all.

• But we‟d need to make a list of all the procedures

• But what did we say?

• Let‟s use the metadata to tag the procedures!

• We‟ll mark the procedures

• We‟ll categorize the procedures

• We‟ll be able to look for all the marked procedures and run them in an automated fashion – no new tables, limited maintenance!

Now we have a bunch of rules

Page 28: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 28

• All procs in DBHealth should have

HEALTH_CHECK_PROC and

HEALTH_CHECK_SET properties

• Show me any unindexed tables (heap tables with

no non-clustered indexes)

• Show me any items tagged with a „TODO‟

extended property

• Show me all columns in the database which

aren‟t actually used (yes, you can do this!)

Ideas For Rules

Page 29: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 29

• Health Monitoring

– .NET

• Code Generation

– T-SQL

– T4

Let’s use this from a client

Page 30: Get a Lever and Pick Any Turtle: Lifting with Metadata

Get a Lever and Pick Any Turtle – Lifting with Metadata Rose Crescent | 30

Materials

• http://bitly.com/bundles/caderoux/3

– 4 Part article by Adam Aspin on SQL Server Central

– Article by Brent Shaub on MSSQLTips.com

– Google Code Repository of presentation and code/scripts

Page 31: Get a Lever and Pick Any Turtle: Lifting with Metadata

EMA I L

WEB