AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[powershell](dba)

Martin Hope
Britt Wescott
Asked: 2022-03-29 07:29:58 +0800 CST

检查跨多个服务器的 SQL Server 访问文件系统

  • 0

本文介绍 SQL Server 数据库引擎访问存储数据库文件的任何文件夹所需的文件系统权限。

我的组织有数十台数据库服务器,每台服务器都将文件存储在不同数量的本地连接驱动器中。

是否有一个我可以运行的自动化 SQL(或 PowerShell)脚本将返回我所有(或不)对 NT SERVICE\MSSQLSERVER SID 具有完全控制权限的文件夹?

我已经尝试过使用DBATools 中的Test- DbaPath。如果文件夹存在,这将返回结果,但是它不会让我知道 SID 是否具有完全控制权。

sql-server powershell
  • 1 个回答
  • 88 Views
Martin Hope
Cataster
Asked: 2021-08-21 17:31:55 +0800 CST

如何指定差异备份选项?

  • 1

我正在实施一个自动日志传送解决方案,到目前为止,我有以下内容:

<#
#Pre-req#
    a. The primary database needs to be in Full recovery mode

#Primary Steps#
1. Backup: Generate DB backup from primary server/instance
2. Restore: Restore backup DB on secondary server/instance.
3. In order to remain in sync efficiently, ship just the transaction logs from the primary -> secondary instance
#>

Get-SqlDatabase -ServerInstance localhost -Database Testxyz | Backup-SqlDatabase -BackupFile 'C:\Users\...\Documents\DB Log Shipping\Backups\Testxyz.bak'

Restore-SqlDatabase -ServerInstance localhost\MSSQLSERVER01 -Database Testxyz -BackupFile 'C:\Users\...\Documents\DB Log Shipping\Backups\Testxyz.bak' -AutoRelocateFile -PassThru

<#
#Primary Steps#
1. Backup: Generate Transaction Log backup (.trn) from primary server/instance DB
2. Restore: Restore DB .trn backup on secondary server/instance.
#>

Get-SqlDatabase -ServerInstance localhost -Database Testxyz | Backup-SqlDatabase -BackupFile 'C:\Users\...\Documents\DB Log Shipping\Backups\Testxyz.trn' -BackupAction Log

Restore-SqlDatabase -ServerInstance localhost\MSSQLSERVER01 -Database Testxyz -BackupFile 'C:\Users\...\Documents\DB Log Shipping\Backups\Testxyz.trn' -RestoreAction Log

我在事务日志还原步骤中遇到错误:

Restore-SqlDatabase:System.Data.SqlClient.SqlError:无法恢复日志或差异备份,因为没有准备好前滚的文件。

我发现这-NoRecovery是防止错误所必需的。否则,如果 SQL Server 在线并且还接受数据库备份文件,则可能存在数据不一致。因此,数据库必须处于可以进一步接受备份数据而不是在线数据请求的状态。

所以我尝试了:

Get-SqlDatabase -ServerInstance localhost -Database Testxyz | Backup-SqlDatabase -BackupFile 'C:\Users\...\Documents\DB Log Shipping\Backups\Testxyz.trn' -BackupAction Log -NoRecovery

但即便如此,仍然会导致错误。

我读过差异备份,其中差异备份仅捕获自完整备份以来已更改的数据。

如何解决此问题并实施差异备份日志?

sql-server powershell
  • 1 个回答
  • 84 Views
Martin Hope
Vangass
Asked: 2021-07-13 04:49:36 +0800 CST

如何从 MSSQL 获取当前使用的 SSL 证书指纹

  • 0

那么,如何使用 Powershell 从 MSSQL 获取当前正在运行的 SSL 证书(尤其是指纹)?它可能包括 SQL 命令...

我知道它在 Windows 注册表中,但是如果您更改它,那么它将仅在 MSSQL 重新启动后应用。

因此,注册表中配置的证书与实际运行的证书之间存在未定义的空白空间。

谢谢!

sql-server powershell
  • 1 个回答
  • 565 Views
Martin Hope
John Deupree
Asked: 2021-02-19 09:39:09 +0800 CST

SQL Server 2019 使用脚本设置强制加密

  • 1

我必须更新 50 多台服务器才能使用加密的连接字符串。有没有办法编写脚本设置强制加密和 TrustServerCertificate(例如 Powershell 或???),这样我就不必打开配置管理器并在每个框上进行设置?

sql-server powershell
  • 1 个回答
  • 136 Views
Martin Hope
cilerler
Asked: 2021-01-20 03:32:07 +0800 CST

`Invoke-SqlCmd` 不会显示 RAISERROR 消息,而 `sqlcmd` 会显示

  • 1

我从 切换sqlcmd到Invoke-SqlCmd,突然我的 RAISERROR 消息消失了。当我用 运行它时sqlcmd,它们会出现。有什么办法让它们可见Invoke-SqlCmd吗?

RAISERROR (N'Hello World',0,1) WITH NOWAIT;
Invoke-SqlCmd -Server $env:MSSQL_SERVERNAME -Username $env:MSSQL_USERNAME -Password $env:MSSQL_PASSWORD -Database "mydatabase" -Query "EXEC dbo.myprocedure" -OutputSqlErrors $true;
/opt/mssql-tools/bin/sqlcmd -S $env:MSSQL_SERVERNAME -U $env:MSSQL_USERNAME -P $env:MSSQL_PASSWORD -d mydatabase -Q "EXEC dbo.myprocedure";
sql-server powershell
  • 1 个回答
  • 240 Views
Martin Hope
Murali Dhar Darshan
Asked: 2021-01-13 04:36:48 +0800 CST

如何将多个invoke-sqlcmd详细输出记录到单个日志文件中,同时通过标志显示/不显示它们到prowershell提示符中

  • 0

假设我们有多个 invoke-sqlcmd 语句,如下所示:

invoke-sqlcmd -Query "PRINT 'Hello World 1'" -ServerInstance Server\SQL2017 -Database abc -Verbose
invoke-sqlcmd -Query "PRINT 'Hello World 2'" -ServerInstance Server\SQL2017 -Database abc -Verbose
invoke-sqlcmd -Query "PRINT 'Hello World 3'" -ServerInstance Server\SQL2017 -Database abc -Verbose

我想做以下事情:

  1. 我想将多个 invoke-sqlcmd 命令的详细输出语句记录到单个日志文件中
  2. 除了登录日志文件,我们还可以在 powershell 窗口中显示详细输出吗?另外,我们可以通过任何标志来管理它以在 powershell 窗口中显示输出吗?

请建议是否可能。

powershell logging
  • 2 个回答
  • 624 Views
Martin Hope
zapcon
Asked: 2020-12-15 06:55:35 +0800 CST

SQL Server 2019 System.Data.SqlClient 命名空间查询

  • 0

我在 SQL 2019 企业版的 System.Data.SqlClient 命名空间中使用 .NET 类,并通过在 PowerShell 中创建函数成功运行 TSQL 命令。

function SqlQuery($server, $database, $query)
{
 $connection = New-Object System.Data.SqlClient.SqlConnection
 $connection.ConnectionString = "Server=$server;Database=$database;Integrated Security=True;"
 $connection.Open()
 $command = $connection.CreateCommand()
 $command.CommandText = $query
 $result = $command.ExecuteReader()
 $table = new-object “System.Data.DataTable”
 $table.Load($result)
 $connection.Close()
 return $table
}

SqlQuery $Server $Database "SELECT * FROM Staff"

我有一些相当大的 T-SQL 代码存储在离散文件中,我想针对这个实例执行这些代码。是否可以利用该函数调用存储在文件系统文件中的 T-SQL 脚本?

powershell sql-server-2019
  • 1 个回答
  • 235 Views
Martin Hope
Geoff Dawdy
Asked: 2020-09-28 14:44:17 +0800 CST

将多个实例传入 dbatools 命令 GET-DBADBFILE

  • 0

我正在尝试在我们的一个环境中收集所有 sql 实例的所有 dbfile 信息。这是一个相当大的环境,一次执行一个实例会很乏味。我认为使用 Powershell 会有一种简单的方法来做到这一点,但我似乎遇到了障碍。

我有一个存储在表/视图 [vSQLInstances] 中的实例列表。如果我将这些值传递给一个变量,然后将该变量用作 SQLInstance 参数,则会出现错误。

我正在使用的脚本...

$sqlinstance = Invoke-DbaQuery -SqlInstance dbasql01\sql2019 -Database DBAEstate -Query "select sqlinstance from vSQLInstance;"

Get-DbadbFile -SqlInstance $sqlinstance | Select-Object sqlinstance, database, logicalname, size 

我收到的错误:

Get-DbaDbFile : Cannot process argument transformation on parameter 'SqlInstance'. Cannot convert value 
"@{sqlinstance=PRODSQLD\D}" to type "Sqlcollaborative.Dbatools.Parameter.DbaInstanceParameter". Error: "Failed to interpret 
input as Instance: @{sqlinstance=PRODSQLD\D}"
At line:11 char:28
+ Get-DbaDbFile -SqlInstance $instancelist
+                            ~~~~~~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Get-DbaDbFile], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-DbaDbFile
sql-server powershell
  • 1 个回答
  • 417 Views
Martin Hope
Saravana Kumar
Asked: 2020-07-22 14:26:42 +0800 CST

生成脚本以删除或映射 SQL Server 实例中的孤立用户

  • 0

我对 SQL Server 很陌生。我有一个脚本可以在所有数据库中找到孤立用户并生成脚本以删除或映射用户以正确登录(如果可用)。

由于我想在大量服务器上运行脚本,我想到了使用 PowerShell 来帮助我。但我现在有两个问题:

  1. 脚本错误
  2. Power-shell 执行错误

问题 1:以下脚本本身返回输出,但仍然显示一些错误。我试图调试,但我无法这样做。

DECLARE @orphan_users TABLE (
    Server NVARCHAR(MAX),
    DBName sysname,
    [user_name] sysname,
    type_desc nvarchar(60),
    default_schema_name sysname NULL,
    create_date datetime,
    modify_date DATETIME,
    [sid] VARBINARY(85),
    cr_type int
); 

INSERT INTO @orphan_users (Server,
    DBname,
    [user_name],
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    [sid],
    cr_type
) 
EXEC sp_msforeachdb 
'use [?] 
SELECT 
    @@SERVERNAME 
    ,DB_NAME() DBname 
    ,name 
    ,type_desc 
    ,default_schema_name 
    ,create_date 
    ,modify_date 
    ,[sid] 
    ,Datalength(sid) AA 
from sys.database_principals 
where type in (''S'') 
and [sid] not in ( select [sid] from sys.server_principals where type in (''G'',''S'',''U'') ) 
and name not in (''dbo'',''guest'',''INFORMATION_SCHEMA'',''sys'' ,''MS_DataCollectorInternalUser'')'; 

DECLARE @db_users TABLE (
    [LogInAtServerLevel] NVARCHAR(MAX),
    [UserAtDBLevel] NVARCHAR(MAX), 
    DBname sysname
); 

INSERT INTO @db_users ([LogInAtServerLevel], [UserAtDBLevel],DBname) 
EXEC sp_msforeachdb 
'use [?] 
SELECT 
    susers.[name],
    users.[name],
    DB_NAME() DBname               
from sys.database_principals users 
inner join sys.database_role_members link 
   on link.member_principal_id = users.principal_id 
inner join sys.database_principals roles 
   on roles.principal_id = link.role_principal_id 
inner join sys.server_principals susers 
   on susers.sid = users.sid'; 

SELECT 
    a.Server,
    a.DBName,
    a.user_name,
    b.name,cr_type,
    c.UserAtDBLevel, 
    CASE 
        WHEN (b.name IS NULL) and (cr_type > 17) 
            THEN 'USE ' + QUOTENAME(a.DBname) + '; DROP USER ' + QUOTENAME(a.user_name) + ';' 
        WHEN (b.name IS not NULL) and (cr_type < 17) and (c.UserAtDBLevel is null) 
            THEN 'USE ' + QUOTENAME(a.DBname) + '; ALTER USER ' + QUOTENAME(a.user_name) + ' WITH LOGIN = ' + QUOTENAME(b.name)+';' 
        WHEN (b.name IS not NULL) and (cr_type < 17) and (c.UserAtDBLevel is not null) 
            THEN 'USE ' + QUOTENAME(a.DBname) + '; DROP USER ' + QUOTENAME(a.user_name) + ';' 
        WHEN (b.name IS NULL) 
            THEN 'USE ' + QUOTENAME(a.DBname) + '; DROP USER ' + QUOTENAME(a.user_name) + ';' 
        WHEN (b.name IS not NULL) and (cr_type > 17) 
            THEN 'USE ' + QUOTENAME(a.DBname) + '; DROP USER ' + QUOTENAME(a.user_name) + ';' 
    END as [remediation] 
FROM ((@orphan_users a 
    left join sys.server_principals b on a.user_name = b.name)  
    left join @db_users c on c.DBname=a.DBName and c.LogInAtServerLevel=b.name) 
ORDER BY a.user_name; 

结果是

在此处输入图像描述

但是由于该错误,实例中的所有数据库都会出现类似的错误

“tempdbfrom”附近的语法不正确。消息 102,级别 15,状态 1,第 3 行
“modelfrom”附近的语法不正确。消息 102,级别 15,状态 1,第 3 行
“msdbfrom”附近的语法不正确。消息 102,级别 15,状态 1,第 3 行
'dbamonfrom' 附近的语法不正确。消息 102,第 15 级,状态 1,第 3 行

问题 2:由于脚本是准确的(至少在我的环境中),所以我尝试使用 power-shell 运行它,如下所示。它只返回错误,没有输出

Invoke-SqlCmd `
    -InputFile "D:\temp\up.sql" `
    -ServerInstance 'abc\sql2012' `
    -IncludeSqlUserErrors

我已经尝试了使用 > 重定向输出的所有方法来启动和停止转录。他们似乎都没有捕捉到查询给出的结果,但是错误被准确捕捉到了..

如果任何一个问题得到解决,这对我来说将是一个很大的帮助。

sql-server powershell
  • 3 个回答
  • 358 Views
Martin Hope
SqlDBA
Asked: 2020-05-23 09:27:21 +0800 CST

使用 PowerShell 删除数据域上过期的 SQL Server 数据库备份文件

  • 1

我正在数据域上备份数据库,但是我必须使用以下命令删除过期的备份。这是一个用于 Microsoft sql server 的 emc databoost 代理应用程序。

我正在尝试将命令转换为 powershell,以便我可以运行该命令以循环删除多个客户端的过期备份。这样我就可以避免在每个单独的客户端上运行命令。

我创建了以下脚本并$clientname进行了硬编码,但我想$clientname在循环中传递多个服务器名称。

$FileExe = "C:\..\bin\ddbmexptool.exe"
$dbtype = "mssql"
$dduser = "DDBOOST_USER=dduser"
$ddhostpath = "DEVICE_PATH=DDHOSTMSSQL"
$devicehostname = "DEVICE_HOST=ddhost.domain.com"
$clientname = "CLIENT=server1.domain.com"

& $FileExe -n $dbtype -a $dduser -a $ddhostpath -a $ddhostpath -a $devicehostname -a $clientname -b "6 weeks ago" -e "2 weeks ago"
sql-server powershell
  • 1 个回答
  • 398 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve