1

我正在尝试使用 php 扩展我的 Azure SQL DB。所有其他 sql 语句都可以正常工作,但是当我发送

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

我收到这样的错误

User must be in the master database.

我的数据库网址是

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执行它。

之后,刷新 (Ctrl+F5) Windows Azure 管理门户,您应该会在数据库的 Scale 选项卡上看到新的最大大小。

您还可以通过使用工具连接到扩展数据库(而不是主数据库)并发出以下命令来验证它是否有效:

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)'

我很确定 SQL Azure 不支持使用该USE命令切换数据库。

尝试直接连接到连接中的主数据库,并USE Master从查询的开头删除该语句。

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

这在我看来也是不对的。在服务器连接 afaik 结束时,您不应该有一个名为 SQLExpress 的命名实例。

于 2013-07-23T15:44:20.770 回答