22/08/2018, 11:42

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 10

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1 Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2 Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 3 Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 4 ...

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 3
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 4
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 5
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 6
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 7

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 8
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 9

 The MAK

Sử dụng kịch bản PowerShell để tạo kịch bản SQL Server cho cơ sở dữ liệu và các bảng

Phần 10 này chúng tôi sẽ giới thiệu cách sử dụng các kịch bản PowerShell kết hợp với SMO và các tham số để tạo kịch bản SQL Server. Việc tạo các kịch bản SQL Server là một nhiệm vụ quan trọng cho quản trị viên và các chuyên gia phát triển cơ sở dữ liệu SQL Server.

Chúng ta hãy giả dụ rằng muốn có một script PowerShell để tạo kịch bản “Create Database” cho một cơ sở dữ liệu hoặc kịch bản “Create object” cho tất cả các đối tượng từ một cơ sở dữ liệu đã có. Thêm vào đó, tên máy chủ và tên cơ sở dữ liệu sẽ được thông qua như các tham số đối với kịch bản PowerShell.

Chúng ta có thể thực hiện công việc này bằng cách tạo một kịch bản PowerShell như bên dưới.

Tạo C:PSScriptSQL.ps1 như thể hiện bên dưới. Tham khảo hình 1.0

param
(
  [string] $ServerName,
  [string] $DatabaseName,
  [string] $scriptType
)

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$MyScripter=new-object ("Microsoft.SqlServer.Management.Smo.Scripter")
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$ServerName"
$db = $srv.Databases["$DatabaseName"]
$MyScripter.Server=$srv

if ($scriptType -eq "Database")
{
echo "Database Scripts "
echo "-----------------"

$MyScripter.Script($srv.databases["$DatabaseName"])
}

if ($scriptType -eq "Tables")
{
echo "Table Scripts "
echo "-----------------"

$MyScripter.Script($srv.Databases["$DatabaseName"].tables)
}


Hình 1.0

Thực thi kịch bản PowerShell như bên dưới (Hình 1.1)

./ScriptSQL "HOMESQLEXPRESS" "Admin" "Database"


Hình 1.1

Giải thích các tham số:

  • ScriptSQL là kịch bản của ScriptSQL.ps1 trong thư mục c:ps
  • HOME là hostname
  • SQLEXPRESS là tên máy chủ SQL instance trên host HOME
  • Admin là tên cơ sở dữ liệu cư trú trong SQLEXPRESS
  • Database là tham số khi được thông qua sẽ tạo kịch bản “Create database”

Script này tạo kịch bản “Create Database” bên dưới (Hình 1.2)

Database Scripts
-----------------
CREATE DATABASE [Admin] ON  PRIMARY
( NAME = N'admin', FILENAME = N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATAadmin.mdf' , SIZE = 2240KB , M
AXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'admin_log', FILENAME = N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDATAadmin_log.LDF' , SIZE = 76
8KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
EXEC dbo.sp_dbcmptlevel @dbname=N'Admin', @new_cmptlevel=90
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Admin].[dbo].[sp_fulltext_database] @action = 'enable'
end
ALTER DATABASE [Admin] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [Admin] SET ANSI_NULLS OFF
ALTER DATABASE [Admin] SET ANSI_PADDING OFF
ALTER DATABASE [Admin] SET ANSI_WARNINGS OFF
ALTER DATABASE [Admin] SET ARITHABORT OFF
ALTER DATABASE [Admin] SET AUTO_CLOSE ON
ALTER DATABASE [Admin] SET AUTO_CREATE_STATISTICS ON
ALTER DATABASE [Admin] SET AUTO_SHRINK OFF
ALTER DATABASE [Admin] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [Admin] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [Admin] SET CURSOR_DEFAULT  GLOBAL
ALTER DATABASE [Admin] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [Admin] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [Admin] SET QUOTED_IDENTIFIER OFF
ALTER DATABASE [Admin] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [Admin] SET  ENABLE_BROKER
ALTER DATABASE [Admin] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE [Admin] SET DATE_CORRELATION_OPTIMIZATION OFF
ALTER DATABASE [Admin] SET TRUSTWORTHY OFF
ALTER DATABASE [Admin] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [Admin] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [Admin] SET  READ_WRITE
ALTER DATABASE [Admin] SET RECOVERY FULL
ALTER DATABASE [Admin] SET  MULTI_USER
ALTER DATABASE [Admin] SET PAGE_VERIFY CHECKSUM
ALTER DATABASE [Admin] SET DB_CHAINING OFF


Hình 1.2

Lúc này thực thi kịch bản PowerShell như bên dưới (Hình 1.3)

./ScriptSQL "HOMESQLEXPRESS" "VixiaTrack""Tables"


Hình 1.3

Giải thích các tham số:

  • ScriptSQL là kịch bản ScriptSQL.ps1 trong thư mục c:ps
  • HOME là hostname
  • SQLEXPRESS là tên máy chủ SQL Server instance trên host HOME
  • VixiaTrack là tên cơ sở dữ liệu cư trú trong SQLEXPRESS
  • “Tables” là tham số khi được thông gua sẽ tạo kịch bản “Create table”

Script này sẽ tạo kịch bản “Create Database” dưới đây (Hình 1.4)

SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[StockCriteriaHistory](
        [StockCriteriaHistoryID] [int] IDENTITY(1,1) NOT NULL,
        [LocationID] [int] NULL,
        [LocationDescription] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [SiteID] [int] NULL,
        [Site] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WingID] [int] NULL,
        [Wing] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [BuildingID] [int] NULL,
        [Building] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [FloorNo] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DepartmentID] [int] NULL,
        [Department] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [RoomNo] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [RoomTypeID] [int] NULL,
        [RoomType] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [VixiaLocationType] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [VixiaLocationNo] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [TargetCount] [int] NULL,
        [LowAlertCount] [int] NULL,
        [LowAlarmCount] [int] NULL,
        [HighAlertCount] [int] NULL,
        [HighAlarmCount] [int] NULL,
        [EquipCategoryID] [int] NULL,
        [EquipCategory] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [EquipTypeID] [int] NULL,
        [EquipType] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [CreatedDt] [datetime] NULL,
        [CreatedID] [int] NULL,
        [UserName] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[Wing](
        [WingID] [int] IDENTITY(1,1) NOT NULL,
        [Description] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [CreatedID] [int] NULL,
        [CreatedDt] [datetime] NULL
) ON [PRIMARY]


SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[XMLStaging](
        [rdt] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [us] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [ltid] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [ls] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [eqtid] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [es] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [tp] [nvarchar](364) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

SET ANSI_NULLS OFF
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[UploadedFile](
        [UploadedFileID] [int] IDENTITY(1,1) NOT NULL,
        [Description] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [UploadedUserID] [int] NULL,
        [UploadedDt] [datetime] NULL
) ON [PRIMARY]


Hình 1.4

Bạn có thể gửi đầu ra vào một file như thể hiện bên dưới (Hình 1.5)

./ScriptSQL "HOMESQLEXPRESS" "VixiaTrack" "Tables" > C:MyScript1.sql


Hình 1.5

Kịch bản đã tạo không được lưu trong C:MyScript1.sql. (Tham khảo hình 1.6)


Hình 1.6

Kết luận

Phần 10 của loạt bài này chúng tôi đã giới thiệu cho các bạn cách sử dụng kịch bản PowerShell kết hợp với SMO để tạo kịch bản cho một cơ sở dữ liệu và các bảng bằng cách thông qua các tham số.

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 11

0