次の方法で共有


Linux 上の PowerShell を使用して SQL Server on Linux を管理する

適用対象:SQL Server - Linux

この記事では 、SQL Server PowerShell について説明し、macOS および Linux 上の PowerShell で使用する方法の例をいくつか紹介します。 PowerShell は GitHub のオープン ソース プロジェクトになりました。

Windows PowerShell の詳細については、「Windows PowerShell とは」を参照してください。

クロスプラットフォーム エディター オプション

PowerShell の次の手順はすべて通常のターミナルで動作するか、Visual Studio Code または Azure Data Studio 内のターミナルから実行できます。 VS Code と Azure Data Studio のいずれも macOS と Linux で利用できます。 Azure Data Studio の詳細については、「クイック スタート: Azure Data Studio を使用して SQL Server に接続してクエリを実行する」を参照してください。 また、Azure Data Studioの PowerShell エディター サポートの使用を検討することもできます。

PowerShell をインストールする

サポートされているさまざまな実験用プラットフォームに PowerShell をインストールする方法の詳細については、次の記事を参照してください。

SqlServer モジュールをインストールする

SqlServer モジュールは PowerShell ギャラリーで保守管理されます。 SQL Server を使用する場合は、常に最新バージョンの SqlServer PowerShell モジュールを使用する必要があります。

SqlServer モジュールをインストールするには、PowerShell セッションを開き、次のコードを実行します。

Install-Module -Name SqlServer

PowerShell ギャラリーから SqlServer モジュールをインストールする方法の詳細については、「 SQL Server PowerShell モジュールのインストール」を参照してください。

SqlServer モジュールを使用する

まず、PowerShell を起動します。 macOS または Linux を使用している場合は、コンピューターで ターミナル セッション を開き、「 pwsh 」と入力して新しい PowerShell セッションを起動します。 Windows では、 Win+R を使用し、「 pwsh 」と入力して新しい PowerShell セッションを起動します。

pwsh

SQL Server には、 SqlServerという名前の PowerShell モジュールが用意されています。 SqlServer モジュールを使用して、SQL Server コンポーネント (SQL Server プロバイダーとコマンドレット) を PowerShell 環境またはスクリプトにインポートできます。

PowerShell プロンプトで次のコマンドをコピーして貼り付け、 SqlServer モジュールを現在の PowerShell セッションにインポートします。

Import-Module SqlServer

PowerShell プロンプトで次のコマンドを入力して、 SqlServer モジュールが正しくインポートされたことを確認します。

Get-Module -Name SqlServer

PowerShell には、次の出力のような情報が表示されるはずです。

ModuleType Version    Name          ExportedCommands
---------- -------    ----          ----------------
Script     21.1.18102 SqlServer     {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...

SQL Server に接続し、サーバー情報を取得する

次の手順では、PowerShell を使用して Linux 上の SQL Server インスタンスに接続し、いくつかのサーバー プロパティを表示します。

次のコマンドをコピーして PowerShell プロンプトに貼り付けます。 これらのコマンドを実行すると、PowerShell では、次のことが行われます。

  • インスタンスのホスト名または IP アドレスの入力を求めるダイアログが表示されます
  • [PowerShell 資格情報の要求] ダイアログが表示され、資格情報の入力が求められます。 "SQL ユーザー名" と "SQL パスワード" を使って、Linux 上の SQL Server インスタンスに接続できます
  • Get-SqlInstance コマンドレットを使用してServerに接続し、いくつかのプロパティを表示する

必要に応じて、$serverInstance 変数をお使いの SQL Server インスタンスの IP アドレスまたはホスト名に置き換えることができます。

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Connect to the Server and return a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done

PowerShell には、次の出力のような情報が表示されるはずです。

Instance Name                   Version    ProductLevel UpdateLevel  HostPlatform HostDistribution
-------------                   -------    ------------ -----------  ------------ ----------------
your_server_instance            14.0.3048  RTM          CU13         Linux        Ubuntu

これらの値に対して何も表示されない場合、ターゲット SQL Server インスタンスへの接続に失敗した可能性があります。 同じ接続情報を使用して SQL Server Management Studio から接続できることを確認してください。 次に、接続のトラブルシューティングに関する推奨事項を確認します。

SQL Server PowerShell プロバイダーを使用する

SQL Server インスタンスに接続するもう 1 つの方法は、SQL Server PowerShell プロバイダーを使用することです。 プロバイダーを使用すると、オブジェクト エクスプローラーのツリー構造の中を移動するように SQL Server インスタンスの中を移動できます (ただし、コマンドラインで)。 既定では、このプロバイダーは SQLSERVER:\ という名前の PSDrive として表示されます。これを使用し、ドメイン アカウントでアクセスできる SQL Server インスタンスを接続し、その中を移動できます。 SQL Server on Linux 用に Active Directory 認証を設定する方法については、「構成手順」を参照してください。

SQL Server PowerShell プロバイダーで SQL 認証を使用することもできます。 これを行うには、 New-PSDrive コマンドレットを使用して新しい PSDrive を作成し、接続するための適切な資格情報を指定します。

以下の例では、SQL 認証を使用し、新しい PSDrive を作成する方法を確認できます。

# NOTE: We are reusing the values saved in the $credential variable from the above example.

New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential

Get-PSDrive コマンドレットを実行すると、ドライブが作成されたことを確認できます。

Get-PSDrive

新しい PSDrive が作成されたら、その中での移動を開始できます。

dir SQLonDocker:\Databases

出力は次のようになります。 出力結果が SQL Server Management Studio (SSMS) の [データベース] ノードに表示されるものと似ていると気づくことがあるかもしれません。 ユーザー データベースが表示されますが、システムデータ ベースは表示されません。

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.76 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.57 MB Simple       140 sa

インスタンス上のすべてのデータベースを表示する必要がある場合、Get-SqlDatabase コマンドレットを使用する方法があります。

データベースを取得する

知っておくべき重要なコマンドレットに Get-SqlDatabase があります。 データベースが関係するさまざまな操作に対して、あるいはデータベース内のオブジェクトに対して Get-SqlDatabase コマンドレットを使用できます。 -ServerInstance パラメーターと -Database パラメーターの両方に値を提供する場合、その 1 つのデータベース オブジェクトだけが取得されます。 ただし、-ServerInstance パラメーターのみを指定した場合、そのインスタンス上のすべてのデータベースの完全な一覧が返されます。

# NOTE: We are reusing the values saved in the $credential variable from the above example.

# Connect to the Instance and retrieve all databases
Get-SqlDatabase -ServerInstance ServerB -Credential $credential

Get-SqlDatabase コマンドから返される内容のサンプルを次に示します。

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.63 MB Simple       140 sa
master               Normal        6.00 MB  600.00 KB Simple       140 sa
model                Normal       16.00 MB    5.70 MB Full         140 sa
msdb                 Normal       15.50 MB    1.14 MB Simple       140 sa
tempdb               Normal       16.00 MB    5.49 MB Simple       140 sa

SQL Server エラー ログを調べる

次の手順では、PowerShell を使用して、Linux 上の SQL Server インスタンスでのエラー ログの接続を調べます。

次のコマンドをコピーして PowerShell プロンプトに貼り付けます。 実行に数分かかる場合があります。 これらのコマンドで次の手順が実行されます。

  • インスタンスのホスト名または IP アドレスの入力を求めるダイアログが表示されます
  • [PowerShell 資格情報の要求] ダイアログが表示され、資格情報の入力が求められます。 "SQL ユーザー名" と "SQL パスワード" を使って、Linux 上の SQL Server インスタンスに接続できます
  • Get-SqlErrorLog コマンドレットを使用して Linux 上の SQL Server インスタンスに接続し、以降のエラー ログを取得します。Yesterday

必要に応じて、$serverInstance 変数をお使いの SQL Server インスタンスの IP アドレスまたはホスト名に置き換えることができます。

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday
# done

PowerShell で現在使用できるコマンドレットを調べる

現在、SqlServer モジュールには Windows PowerShell で使用できるコマンドレットが 109 個ありますが、PowerShell では 109 のうち 62 個しか使用できません。 以下に、現在利用できる 62 個のコマンドレットの完全なリストを示します。 SqlServer モジュールの全コマンドレットを詳しく記録したものが必要な場合、SqlServer コマンドレット リファレンスを参照してください。

次のコマンドでは、お使いのバージョンの PowerShell で利用できるすべてのコマンドレットが表示されます。

Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
Select-Object Name
  • ConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlName
  • Get-SqlAgent
  • Get-SqlAgentJob
  • Get-SqlAgentJobHistory
  • Get-SqlAgentJobSchedule
  • Get-SqlAgentJobStep
  • Get-SqlAgentSchedule
  • Invoke-SqlAssessment
  • Get-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOption
  • Get-SqlBackupHistory
  • Invoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKey
  • Remove-SqlColumnMasterKey
  • New-SqlColumnMasterKey
  • Get-SqlCredential
  • Set-SqlCredential
  • New-SqlCredential
  • Remove-SqlCredential
  • New-SqlCspColumnMasterKeySettings
  • Get-SqlDatabase
  • Restore-SqlDatabase
  • Backup-SqlDatabase
  • Set-SqlErrorLog
  • Get-SqlErrorLog
  • New-SqlHADREndpoint
  • Set-SqlHADREndpoint
  • Get-SqlInstance
  • Add-SqlLogin
  • Remove-SqlLogin
  • Get-SqlLogin
  • Set-SqlSmartAdmin
  • Get-SqlSmartAdmin
  • Read-SqlTableData
  • Write-SqlTableData
  • Read-SqlViewData
  • Read-SqlXEvent
  • Convert-UrnToPath