2015-06-23 72 views
0

我試圖通過powershell創建數據庫。我遇到的問題是我想要在啓用某些標誌的情況下創建此數據庫(例如「允許快照隔離」)。我不知道該怎麼做,而且我很難找到答案。用某些標誌創建ms sql數據庫

我迄今所做的:

$SqlSecurePassword = $SqlServerPassword | ConvertTo-SecureString -asPlainText -Force 
$Connection = new-Object Microsoft.SqlServer.Management.Common.ServerConnection("(local)", $SqlServerUser, $SqlServerPassword) 
$Server = new-Object Microsoft.SqlServer.Management.Smo.Server($Connection) 
$Db = new-Object Microsoft.SqlServer.Management.Smo.Database($Server, $DatabaseName) 
$Db.Create() 
+0

如何關於創建數據庫後執行所需的'ALTER DATABASE'語句? – vonPryz

+0

這也是一個選擇,但我希望旗幟是對象的一部分,像'$ Db.SomeFlag = $ True' –

+0

嗯,事實證明,他們實際上可以像這樣設置 –

回答

0

原來我可以叫$Db.SomeFlag = $someValue和這樣的作品,例如:
$Db.AutoShrink = $True

1

我會WIRTE一個SQL腳本來創建數據庫,就像這樣:

CREATE DATABASE [test] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'test', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\test.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'test_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) 
GO 
ALTER DATABASE [test] SET COMPATIBILITY_LEVEL = 120 
GO 
ALTER DATABASE [test] SET ANSI_NULL_DEFAULT OFF 
GO 
ALTER DATABASE [test] SET ANSI_NULLS OFF 
GO 
ALTER DATABASE [test] SET ANSI_PADDING OFF 
GO 
ALTER DATABASE [test] SET ANSI_WARNINGS OFF 
GO 
ALTER DATABASE [test] SET ARITHABORT OFF 
GO 
ALTER DATABASE [test] SET AUTO_CLOSE OFF 
GO 
ALTER DATABASE [test] SET AUTO_SHRINK OFF 
GO 
ALTER DATABASE [test] SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF) 
GO 
ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS ON 
GO 
ALTER DATABASE [test] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO 
ALTER DATABASE [test] SET CURSOR_DEFAULT GLOBAL 
GO 
ALTER DATABASE [test] SET CONCAT_NULL_YIELDS_NULL OFF 
GO 
ALTER DATABASE [test] SET NUMERIC_ROUNDABORT OFF 
GO 
ALTER DATABASE [test] SET QUOTED_IDENTIFIER OFF 
GO 
ALTER DATABASE [test] SET RECURSIVE_TRIGGERS OFF 
GO 
ALTER DATABASE [test] SET DISABLE_BROKER 
GO 
ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO 
ALTER DATABASE [test] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO 
ALTER DATABASE [test] SET PARAMETERIZATION SIMPLE 
GO 
ALTER DATABASE [test] SET ALLOW_SNAPSHOT_ISOLATION ON 
GO 
ALTER DATABASE [test] SET READ_COMMITTED_SNAPSHOT ON 
GO 
ALTER DATABASE [test] SET READ_WRITE 
GO 
ALTER DATABASE [test] SET RECOVERY SIMPLE 
GO 
ALTER DATABASE [test] SET MULTI_USER 
GO 
ALTER DATABASE [test] SET PAGE_VERIFY CHECKSUM 
GO 
ALTER DATABASE [test] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO 
ALTER DATABASE [test] SET DELAYED_DURABILITY = DISABLED 
GO 
USE [test] 
GO 
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [test] MODIFY FILEGROUP [PRIMARY] DEFAULT 
GO 

,然後使用PowerShell執行此文件..這是你的選擇嗎?

+0

當然,你不必指定所有這些選項..這正是SSMS在腳本創建數據庫時所做的。 – CeOnSql

+0

雖然這將工作,這是不切實際的,因爲我使用的參數化Powershell腳本文件獲取標誌作爲輸入。這將涉及大量的寫作...... –

+1

好吧如果你在數據庫創建後只是在必要時執行此操作:'ALTER DATABASE [test] SET ALLOW_SNAPSHOT_ISOLATION ON GO' – CeOnSql

0

此腳本演示了默認數據庫創建T-SQL的所有標誌在SQL 2016年

$DB=[Microsoft.SqlServer.Management.Smo.Database]::new($Server,"TemporaryDB") 
# CONTAINMENT = NONE 
$DB.ContainmentType=[Microsoft.SqlServer.Management.Smo.ContainmentType]::None 
#ALTER DATABASE [TemporaryDB] SET COMPATIBILITY_LEVEL = 130 
$DB.CompatibilityLevel=130 
#ALTER DATABASE [TemporaryDB] SET ANSI_NULL_DEFAULT OFF 
$DB.AnsiNullDefault=$false 
#ALTER DATABASE [TemporaryDB] SET ANSI_NULLS OFF 
$DB.AnsiNullsEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET ANSI_PADDING OFF 
$DB.AnsiPaddingEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET ANSI_WARNINGS OFF 
$DB.AnsiWarningsEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET ARITHABORT OFF 
$DB.ArithmeticAbortEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET AUTO_CLOSE OFF 
$DB.AutoClose=$false 
#ALTER DATABASE [TemporaryDB] SET AUTO_SHRINK OFF 
$DB.AutoShrink=$false 
#ALTER DATABASE [TemporaryDB] SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF) 
$DB.AutoCreateStatisticsEnabled=$true 
$DB.AutoCreateIncrementalStatisticsEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET AUTO_UPDATE_STATISTICS ON 
$DB.AutoUpdateStatisticsEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
$DB.CloseCursorsOnCommitEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET CURSOR_DEFAULT GLOBAL 
$DB.LocalCursorsDefault=$false 
#ALTER DATABASE [TemporaryDB] SET CONCAT_NULL_YIELDS_NULL OFF 
$DB.ConcatenateNullYieldsNull=$false 
#ALTER DATABASE [TemporaryDB] SET NUMERIC_ROUNDABORT OFF 
$DB.NumericRoundAbortEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET QUOTED_IDENTIFIER OFF 
$DB.QuotedIdentifiersEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET RECURSIVE_TRIGGERS OFF 
$DB.RecursiveTriggersEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET DISABLE_BROKER 
$DB.BrokerEnabled=$false 
#ALTER DATABASE [TemporaryDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
$DB.AutoUpdateStatisticsAsync=$false 
#ALTER DATABASE [TemporaryDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
$DB.DateCorrelationOptimization=$false 
#ALTER DATABASE [TemporaryDB] SET PARAMETERIZATION SIMPLE 
$DB.IsParameterizationForced=$false 
#ALTER DATABASE [TemporaryDB] SET READ_COMMITTED_SNAPSHOT OFF 
$DB.IsReadCommittedSnapshotOn=$false 
#ALTER DATABASE [TemporaryDB] SET READ_WRITE 
$DB.ReadOnly=$false 
#ALTER DATABASE [TemporaryDB] SET RECOVERY FULL 
$DB.RecoveryModel=[Microsoft.SqlServer.Management.Smo.RecoveryModel]::Full 
#ALTER DATABASE [TemporaryDB] SET MULTI_USER 
$DB.UserAccess=[Microsoft.SqlServer.Management.Smo.DatabaseUserAccess]::Multiple 
#ALTER DATABASE [TemporaryDB] SET PAGE_VERIFY CHECKSUM 
$DB.PageVerify=[Microsoft.SqlServer.Management.Smo.PageVerify]::Checksum 
#ALTER DATABASE [TemporaryDB] SET TARGET_RECOVERY_TIME = 60 SECONDS 
$DB.TargetRecoveryTime=60 
#ALTER DATABASE [TemporaryDB] SET DELAYED_DURABILITY = DISABLED 
$DB.DelayedDurability=[Microsoft.SqlServer.Management.Smo.DelayedDurability]::Disabled 
#ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0; 
$DB.MaxDop=0 
#ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = PRIMARY; 
$DB.MaxDopForSecondary=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Primary 
#ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = OFF; 
$DB.LegacyCardinalityEstimation=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Off 
#ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET LEGACY_CARDINALITY_ESTIMATION = PRIMARY; 
$DB.LegacyCardinalityEstimationForSecondary=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Primary 
#ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = ON; 
$DB.ParameterSniffing=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::On 
#ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET PARAMETER_SNIFFING = PRIMARY; 
$DB.ParameterSniffingForSecondary=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Primary 
#ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; 
$DB.QueryOptimizerHotfixes=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Off 
#ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET QUERY_OPTIMIZER_HOTFIXES = PRIMARY; 
$DB.QueryOptimizerHotfixesForSecondary=[Microsoft.SqlServer.Management.Smo.DatabaseScopedConfigurationOnOff]::Primary