1

php で Azure SQL DB をスケーリングしようとしています。他のすべてのSQLステートメントは正常に機能しますが、送信するとき

ALTER DATABASE db1_abcd_efgh MODIFY (EDITION = 'Web', MAXSIZE=5GB);

私はそのようなエラーが発生します

User must be in the master database.

私のデータベースのURLはそれです

xaz25jze9d.database.windows.net

データベースはlinkeという名前です

db1_abcd_efgh

function skale_a_m(){
$host = "tcp:xaz25jze9d.database.windows.net,1433\sqlexpress";
$user = "db_user";
$pwd = "xxxxx?!";
$db = "master";  //I have tried out db1_abcd_efgh at this point
try {
    $conn = new PDO("sqlsrv:Server= $host ; Database = $db ", $user, $pwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {

}
$string = 'use master; ALTER DATABASE db1_a_m MODIFY (EDITION =\'Web\', MAXSIZE=5GB)';
$stmt = $conn->query($string);

}

今、私はこれをリンクする関数を変更しました

function skale_a_m() {
$serverName = "tcp:yq6ipq11b4.database.windows.net,1433";
$userName = 'db_user@yq6ipq11b4';
$userPassword = 'xxxxx?!';

$connectionInfo = array("UID" => $userName, "PWD" => $userPassword, "MultipleActiveResultSets" => true);

$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
    echo "Failed to connect...";
}

$string = "ALTER DATABASE master MODIFY (EDITION ='Web', MAXSIZE=5GB)";
$stmt = sqlsrv_query($conn, $string);

}

エラーは発生しませんが、Db はスケーリングしませんでしたか?

4

2 に答える 2

2

ALTER DATABASE (Windows Azure SQL Database)によるとALTER DATABASE、データベースに接続したときにステートメントを発行する必要がありmasterます。

PDO では、これは次のような接続文字列によって実現できます。

"sqlsrv:server=tcp:{$server}.database.windows.net,1433; Database=master"

サンプルコード:

<?php
function scale_database($server, $username, $password, $database, $maxsize) {
    try {
        $conn = new PDO ("sqlsrv:server=tcp:{$server}.database.windows.net,1433; Database=master", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $conn->setAttribute(constant('PDO::SQLSRV_ATTR_DIRECT_QUERY'), true);
        $conn->exec("ALTER DATABASE {$database} MODIFY (MAXSIZE={$maxsize}GB)");
        $conn = null;
    }
    catch (Exception $e) {
        die(print_r($e));
    }
}

scale_database("yourserver", "youruser", "yourpassword", "yourdatabase", "5");
?>

注: エディションを設定する必要はありません。最大サイズに応じて設定されます。

サンプル コードをテストするには、詳細 (サーバー名、ログイン、パスワード、スケーリングするデータベース) を使用して構成し、Microsoft Drivers 3.0 for PHP for SQL Server で構成された PHP で実行します。

その後、Windows Azure 管理ポータルを更新 (Ctrl+F5) すると、データベースの [スケール] タブに反映された新しい最大サイズが表示されます。

また、ツールを使用して (マスター データベースではなく) スケーリングされたデータベースに接続し、次のコマンドを発行することで、それが機能していることを確認できます。

SELECT CONVERT(BIGINT,DATABASEPROPERTYEX ('yourdatabase', 'MAXSIZEINBYTES'))/1024/1024/1024 AS 'MAXSIZE IN GB'
于 2013-07-23T14:07:35.377 に答える
1
$string = 'use master; ALTER DATABASE db1_a_m MODIFY (EDITION =\'Web\', MAXSIZE=5GB)'

USESQL Azure がコマンドを使用したデータベースの切り替えをサポートしていないことは確かです。

接続でマスター データベースに直接接続し、USE Masterクエリの先頭からステートメントを削除してみてください。

$host = "tcp:xaz25jze9d.database.windows.net,1433\sqlexpress";

それも私には間違っているように見えます。サーバー接続の最後に、SQLExpress という名前のインスタンスを作成しないでください。

于 2013-07-23T15:44:20.770 に答える