2013-07-23 3 views
1

im пытается масштабировать мою Azure SQL DB с php. Все остальные операторы SQL работает отлично, но когда им посылкиWindows Azure 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 = '[email protected]'; 
$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); 

}

Теперь я не получаю ошибок, но децибел не масштабироваться?

+0

Вы действительно вошли в базу данных мастера? – sharptooth

+0

@ColinMorelli - речь идет о подключении к master db против созданного db - что-то очень подходящее для StackOverflow. –

+0

Я думаю, что я подключен к мастеру db, и я отправляю свою функцию соединения. –

ответ

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"); 
?> 

Примечание: Это не обязательно устанавливать издание; он будет установлен в соответствии с максимальным размером.

Чтобы проверить образец кода, настройте его своими данными (имя сервера, логин, пароль и базу данных, подлежащие масштабированию) и выполните его с помощью PHP, настроенного с помощью Microsoft Drivers 3.0 for PHP for SQL Server.

После этого обновите (Ctrl + F5) портал управления Windows Azure и увидите новый максимальный размер, отраженный на вкладке Масштаб базы данных.

Вы также можете проверить, что он работал с помощью инструмента для подключения к базе данных масштабируется (а не к основной базе данных) и выдачи этой команды:

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

Я использую стандартного пользователя сервера sql. У меня только один пользователь. Я тестировал мастер использования, но der - другая ошибка. Утверждение USE не поддерживается для переключения между базами данных. Используйте новое соединение для подключения к другой базе данных. –

+0

См. Обновленный ответ для получения инструкций о том, как подключиться к основной базе данных с помощью PDO. –

+0

спасибо, но я получаю сообщение об ошибке при выполнении инструкции Ошибка выполнения SQL-запроса.PDOException Object ([сообщение: protected] => SQLSTATE [42000]: [Microsoft] [SQL Server Native Client 11.0] [SQL Server] Неверный синтаксис рядом с '('. [string: Exception: private] => [code: protected] => 42000 [файл: protected] => C: \ xampp \ htdocs \ dbOperations.php [строка: protected] => 45 [trace: Exception: private ] => Массив ([0] => Массив ([файл] => C: \ xampp \ htdocs \ dbOperations.php [....... –

1
$string = 'use master; ALTER DATABASE db1_a_m MODIFY (EDITION =\'Web\', MAXSIZE=5GB)' 

Я довольно уверен, SQL Azure не поддерживает переключение баз данных с помощью команды USE.

Попробуйте подключиться непосредственно к master db в вашем соединении и удалите оператор USE Master с начала вашего запроса.

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

Это также выглядит неправильно для меня. Вы не должны иметь именованный экземпляр под названием SQLExpress в конце вашего подключения к серверу afaik.

Смежные вопросы