我试图用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没有缩放?
答案 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的命名实例。