dbatools demo

Posted SQL Server学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dbatools demo相关的知识,希望对你有一定的参考价值。

break

#从PowerShell Gallery 安装dbatools模组
Install-Module dbatools

<#
    01.查找SQL实例
    02.连接SQL实例
    03.检查备份
    04.检查磁盘空间
    05.备份数据库
    06.安装欧拉维护工具
    07.运行Job
    08.测试备份
    09.查看fail的job
    10.检查最大内存设置
    11.检查SQL版本
    12.数据库迁移和账号迁移

#>


#开始, 查找SQL实例
#使用tcp,udp,spns,wmi等方式探查
Find-DbaInstance -ComputerName 192.168.1.51


#把登陆信息存起来
$securePassword = (\'yourpassword\' | ConvertTo-SecureString -asPlainText -Force)
$credential = New-Object System.Management.Automation.PSCredential(\'sa\', $securePassword)

#然后,尝试连接SQL
Connect-DbaInstance -SqlInstance 192.168.1.51 -SqlCredential $credential


#弹框,输入账号密码
$cred=get-credential sa
Connect-DbaInstance -SqlInstance 192.168.1.52 -SqlCredential $cred

#可以使用SSMS中的注册服务器,利用里面存的账号信息登陆
Get-DbaRegisteredServer -Name 192.168.1.52

#使用管道,连续操作
Get-DbaRegisteredServer -Name 192.168.1.52 | get-dbalastbackup| Out-GridView

#检查你的备份情况
get-dbalastbackup -SqlInstance 192.168.1.52 -SqlCredential $cred |Select-Object * | Out-GridView

#备份有缺失? 检查磁盘空间是否足够,使用windows账号
get-dbadiskspace -ComputerName 192.168.1.52 -Credential fp-qsmc\\administrator

#OK,空间足够,快速备份数据库,作为测试可以设定网络共享路径

backup-dbadatabase -SqlInstance 192.168.1.52 -SqlCredential $cred -Path \\\\192.168.1.52\\backup  

#确认备份时间
Get-DbaLastBackup -SqlInstance 192.168.1.52 -SqlCredential $cred | Out-GridView


#安装欧拉维护工具
$params=@
    sqlinstance="192.168.1.52"
    installjobs=$true
    replaceexisting=$true
    backuplocation="\\\\192.168.1.52\\backup"
    sqlcredential=$cred

Install-DbaMaintenanceSolution @params

#运行一些Job

get-dbaagentjob -SqlInstance 192.168.1.52 -SqlCredential $cred |Out-GridView -PassThru |Start-DbaAgentJob  
invoke-item -Path "\\\\192.168.1.52\\backup"

#如果你好奇,可以查看一下正在运行的job
Get-DbaRunningJob  -SqlInstance 192.168.1.52 -SqlCredential $cred |Out-GridView

#测试备份,并运行dbcc checkdb

Test-DbaLastBackup  -SqlInstance 192.168.1.52 -SqlCredential  $cred -Database AdventureWorks2019 | Out-GridView

#查看fail的job列表 
Find-DbaAgentJob  -SqlInstance 192.168.1.51 -SqlCredential $cred -IsFailed | Get-DbaAgentJobHistory |Out-GridView

#检查最大内存设置
Test-DbaMaxMemory  -SqlInstance 192.168.1.52 -SqlCredential $cred | Set-DbaMaxMemory -WhatIf

$instanceSplat = @
    SqlInstance   = $source, $target

#检查dbowner设置
Test-DbaDbOwner @instanceSplat |
Select-Object SqlInstance, Database, DBState, CurrentOwner, TargetOwner, OwnerMatch |
Format-Table
#检查恢复模式
Test-DbaDbRecoveryModel @instanceSplat |
Select-Object SqlInstance, Database, ConfiguredRecoveryModel, ActualRecoveryModel |
Format-Table

#检查tempdb文件个数配置
Test-DbaTempDbConfig @instanceSplat|Format-Table

#检查MAXDOP设置 Calculator (https://blogs.msdn.microsoft.com/sqlsakthi/p/maxdop-calculator),
Test-DbaMaxDop @instanceSplat|Format-Table

#检查SQL版本,是否打最新补丁
#更新补丁信息
Update-DbaBuildReference

#检查SQL版本
Test-DbaBuild  -SqlInstance 172.26.40.91 -SqlCredential $cred -Latest

Test-DbaBuild  -SqlInstance 192.168.1.52 -SqlCredential $cred -Latest

#运行数据库迁移和账号迁移
$securePassword = (\'yourpassword\' | ConvertTo-SecureString -asPlainText -Force)
$credential = New-Object System.Management.Automation.PSCredential(\'sa\', $securePassword)
$source = connect-dbainstance -sqlinstance 192.168.1.51 -SqlCredential $credential
$target = connect-dbainstance -sqlinstance 192.168.1.52 -SqlCredential $credential 


$migrateDbSplat = @
    Source        = $source
    Destination   = $target
    Database      = \'TSQL\'
    BackupRestore = $true
    SharedPath    = \'\\\\192.168.1.51\\backup\'
    #SetSourceOffline        = $true
    #Verbose       = $true
  
Copy-DbaDatabase @migrateDbSplat 

#账号迁移
$migrateLoginSplat = @
    Source      = $source
    Destination = $target
    #Verbose     = $true

Copy-DbaLogin @migrateLoginSplat







 

  

使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败

【中文标题】使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败【英文标题】:Importing Database via BACPAC / DACPAC Failing On Users When Using CLI Tools (sqlpackage.exe / PS dbatools) 【发布时间】:2019-12-22 08:47:59 【问题描述】:

目标

使用 PowerShell 脚本将 SQL 数据库克隆到不同的远程 SQL Server

什么有效

使用 SSMS 将 BACPAC 文件导入不同的服务器(远程和本地)可以正常工作,而不会出现(报告的)警告或错误。

什么不是

使用 sqlpackage.exe 和 PowerShell dbatools 将 BACPAC 导入远程 SQL Server 会导致以下错误:

Warning SQL72038: The object [XXX] already exists in database with a different definition and will not be altered.
Error SQL72014: .Net SqlClient Data Provider: Msg 15023, Level 16, State 1, Line 1 User, group, or role 'XXX' already exists in the current database.
Error SQL72045: Script execution error.  The executed script:
CREATE USER [XXX] FOR LOGIN [XXX];

我也尝试过使用 PS dbatools DACPAC 方法:https://dbatools.io/clone/

不同设置的错误信息改为:

Initializing deployment (Start)
                       The object [XXX] already exists in database with a different definition and will not be altered.
                       Initializing deployment (Complete)
                       Analyzing deployment plan (Start)
                       Analyzing deployment plan (Complete)
                       Reporting and scripting deployment plan (Start)
                       Reporting and scripting deployment plan (Complete)
                       Updating database (Start)
                       Creating NEW_DATABASE...
                       The database settings cannot be modified. You must be a SysAdmin to apply these settings.
                       Creating [XXX]...
                       .Net SqlClient Data Provider: Msg 15023, Level 16, State 1, Line 1 User, group, or role 'XXX' already
                       exists in the current database.
                       Script execution error.  The executed script:
                       CREATE USER [XXX] WITHOUT LOGIN;

An error occurred while the batch was being executed.
                       Updating database (Failed)

下一步是禁用用户并通过脚本添加回所需的用户和角色。使用以下链接作为参考,我无法使用我们现有的管理员登录名和密码删除数据库。

DacPac exclude users and logins on export or import

要解决这个问题,我们必须在 RDS 中更改管理员密码

AWS RDS SQL Server unable to drop database

备注

我无法删除用户 XXX,因为它已映射到不同的数据库 SQL Server Management Studio v17.9.1 PowerShell dbatools v1.0.30

问题

有没有办法找出 SSMS 正在执行什么,以便我可以通过脚本复制它? 有哪些选项可以解决此问题?

【问题讨论】:

我不确定您是否使用了正确的工具来完成这项工作。 docs.microsoft.com/en-us/sql/tools/sqlpackage/… 表示您不能使用导入现有数据库,除非它不包含任何用户定义的对象。如果您使用它来更新数据库架构,我认为您需要使用 dacpac 发布。 感谢您的回复。问题是,如何通过 CLI 工具将生产数据库克隆到测试 SQL Server 中?即我需要每个表、存储过程、行等。我感到困惑的是 SSMS 与 bacpacs 配合得很好,但我无法使用 CLI 工具复制该功能 创建一个空数据库,然后使用sqlpackage导入。 【参考方案1】:

虽然我会在这里分享我的意见,但现在回答这个问题已经很晚了,以便将来有人会发现它有助于解决问题。

这是我所做的,但有一些例外。排除对象类型 = Users;Permissions;RoleMembership;Logins;在sql包命令行属性中成功部署数据库。

例外情况是,您将无法在现有集合上部署您的用户、权限。在全新安装时,您可以删除此排除属性以部署整个集合而不会出错。

这是要在 sqlPackage.exe 命令中使用的命令行参数

/P:ExcludeObjectTypes=Users;Permissions;RoleMembership;Logins; 

参考:MS DOCS -> https://docs.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-publish?view=sql-server-ver15

【讨论】:

以上是关于dbatools demo的主要内容,如果未能解决你的问题,请参考以下文章

使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败

demo版 是啥意思

Demo 版

Scrum 之 Demo

Makefile学习

什么是小程序demo源码