Windows Azure SQL动态扩展无效

时间:2013-07-23 12:38:22

标签: azure azure-sql-database

我试图用php扩展我的Azure SQL数据库。所有其他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);

}

现在我修改了我的函数linke this

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没有缩放?

2 个答案:

答案 0 :(得分: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管理门户,您应该会看到新的最大大小反映在数据库的“缩放”选项卡上。

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

SELECT CONVERT(BIGINT,DATABASEPROPERTYEX ('yourdatabase', 'MAXSIZEINBYTES'))/1024/1024/1024 AS 'MAXSIZE IN GB'

答案 1 :(得分: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";

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