我是一名DBA,我尝试通过PS执行查询,而不是使用SQL Developer登录到每台服务器。但到目前为止,我只成功地使用了外部SQL文件。我尝试使用PS脚本中声明的变量来执行查询。
脚本:
$sqlQuery='GRANT ROLE TO USER;quit;'
$cmd = "cmd.exe"
$srvList = 'SRVONE','SRVTWO','SRVTHREE','SRVFOUR'
echo $srvList
$init = "/c sqlplus user/password//DB_"
$mid = ":1521/"
foreach ($srv in $srvList){
$srvEx +=$init
$srvEx +=$srv
$srvEx +=$mid
$srvEx +=$srv
$srvEx +=" @"
$srvEx +=$sqlQuery
Write-Host $srvEx
&cmd $srvEx;
$srvEx=''
}
上面是我做的脚本,它可以连接到SQL数据库,但是变量$sqlQuery中的查询不会运行,也不会给出任何结果。
4条答案
按热度按时间4smxwvx51#
请使用dba tools。使用Invoke-DbaQuery cmdlet执行此操作非常简单。
我有一个名为vm 4 win10的本地服务器。然而,这将适用于任何版本的SQL服务器,你可以在其中建立连接。下面是我将要使用的变量。
获取标准用户“jminer”的密码。如果需要,这可以是Windows用户。
在我的例子中,我将把adventure works的customer表转储到一个csv文件中,但是这个查询很容易成为一个服务器任务。
显示数据行对象数组的第一个元素。
下一个代码段将$cust变量通过管道传输到一个cmdlet以编写csv文件。
这显示了我最喜欢的编辑器notepad++中的前几行。
所以,是的,我有点偏离了轨道。但是dba工具有一船的cmdlet给偶然的DBA。
回到你的用例。让我们假设adventure works数据库安装在三台服务器上。用户Robin已经被添加到每台服务器上。现在我们想授予对数据库的控制权限。jminer的凭据对每台服务器都有sysadmin访问权限。
简而言之,使用dbatool很容易。
wgeznvg72#
看看这篇文章。它使用ODBC,但应该工作正常。这将需要ORACLE的客户端工具安装在能够访问Oracle服务器的Jump Server上。你甚至可能需要设置你的tnsnames.ora文件。
https://www.andersrodland.com/working-with-odbc-connections-in-powershell/
如果你愿意,第1步可以手工完成。第2步获得DSN连接。第3步执行SQL。如果你不能存储凭据,它可能会提示你输入凭据。这没有DBA工具那么漂亮!
您必须为要使用的每个服务器设置DSN连接。
dxpyg8gm3#
对于DBA来说,安装Oracle客户端并使用sqlplus来运行SQL和PL/SQL脚本已经是二十多年来的经典做法。使用SQLDeveloper,您可以拥有一个“漂亮”的图形界面来查看查询结果,编辑存储程序单元,并比使用普通sqlplus更容易地查看编译错误。然而,对于运行脚本来说,sqlplus往往是首选。
cfh9epnr4#
产出
脚本