В статье «Обмен шаблонами Management Studio» (опубликованной в этом же номере журнала), описано решение двойной проблемы, проистекающей из невозможности настроить назначаемое по умолчанию расположение папки шаблонов для SQL Server Management Studio и организовать обмен шаблонами между компьютерами или группами. Прежде чем переходить к данной статье, я рекомендую прочитать, как было построено это решение.
Некоторые читатели спрашивали меня, почему я просто не использовал символьную ссылку для синхронизации, а отдал предпочтение сторонней программе? В ответ мне показалось уместным написать отдельную статью и объяснить, почему символьные ссылки непригодны для этой цели и каким образом с их помощью можно реализовать часть функций при совместном использовании шаблонов членами групп и несколькими устройствами.
Символьная ссылка
Теперь, когда вы, надеюсь, познакомились с подходом на основе сторонней программы в сочетании с «облачной» службой, такой как Dropbox или OneDrive, я представлю похожий метод с применением символьной ссылки. При этом устраняется потребность в использовании стороннего программного обеспечения, кроме «облачных» служб, необходимых для центрального элемента общего доступа. Я также хочу показать, почему этот метод не является приемлемой альтернативой для синхронизации папок шаблонов, а лишь позволяет обмениваться шаблонами через «облачную» службу общего доступа.
Данное решение построено с использованием символьной ссылки для создания ярлыка в локальной папке синхронизации для избранной «облачной» службы. В отличие от обычного ярлыка, который представляет собой просто указатель на целевой объект, символьная ссылка выглядит и действует таким образом, будто целевая папка или файл действительно существуют в том месте, где размещен ярлык.
Это означает, что главное — создать символьную ссылку в локальной папке «облачной» службы (в данном случае я использую Dropbox, но только потому, что подписан на эту «облачную» службу — любая «облачная» служба общих папок должна функционировать равноценно). Эта символьная ссылка должна указывать на папку шаблонов для вашей версии SQL Server Management Studio:
C:\users\<имя локального профиля пользователя>\AppData\Roaming\Microsoft\ SQL Server Management Studio\<номер версии SSMS>\Templates\…
Идентификация цели
Обратите внимание на многоточие (…) в конце пути. Рассмотрим возможные варианты и способы настройки символьной ссылки.
Вариант 1. Вы хотите синхронизировать все шаблоны с другими компьютерами или пользователями, в том числе шаблоны для служб SQL Data Services, а также Analysis Services.
Это самое простое решение, поскольку синхронизируются все шаблоны, как создаваемые вами, так и предоставляемые Microsoft в составе Management Studio. Какая бы структура или организация ни использовалась для шаблонов, все они будут охвачены процессом синхронизации. В этом случае цель символьной ссылки будет следующей:
C:\users\<имя локального профиля пользователя>\AppData\ Roaming\Microsoft\SQL Server Management Studio\< номер версии SSMS>\Templates
Это объясняется тем, что папка Templates — родительская папка вложенных папок, охватывающих шаблоны для различных задач, решаемых с применением SQL. При построении символьной ссылки, целью которой является каталог/папка, ссылка содержит все дочерние/вложенные папки.
Вариант 2. Вы хотите синхронизировать только шаблоны SQL Data Services с другими компьютерами или пользователями.
В этом случае вы строите символьную ссылку для папки sql, которая находится уровнем ниже представленной здесь. Тогда будут синхронизированы все шаблоны, связанные со службами Data Services, в том числе поставляемые Microsoft, но все прочие шаблоны (такие, как шаблоны SSAS) не синхронизируются:
C:\users\<имя локального профиля пользователя>\AppData\ Roaming\Microsoft\SQL Server Management Studio\<номер версии SSMS>\Templates\SQL
Вариант 3. Вы хотите синхронизировать только шаблоны, отличные от поставляемых Microsoft, с другими компьютерами или пользователями.
Пожалуй, это самый распространенный метод реализации синхронизируемых шаблонов. Он позволяет обмениваться настроенными и созданными в специальной папке шаблонами, отделяя специализированные шаблоны от поставляемых компанией Microsoft. Данный метод наделяет вас «мягкой силой», позволяющей использовать специализированную структуру папок/вложенных папок для любых настраиваемых шаблонов. Обновления для SQL Server Management Studio могут охватывать изменения шаблонов, предоставляемых при установке SSMS. Однако любые настраиваемые папки остаются нетронутыми. Чтобы добиться этого, необходимо сначала создать новую папку в папке C:\users\<имя локального профиля пользователя>\AppData\
Roaming\Microsoft\SQL Server Management Studio\<номер версии SSMS>\Templates\SQL для размещения шаблонов, разработанных внутри компании. Я настоятельно рекомендую назначать папкам имена так, чтобы они предшествовали по алфавиту папке шаблонов от Microsoft. Таким образом, они всегда будут вверху в обозревателе шаблонов, что обеспечит удобный доступ к часто используемой папке шаблонов. Я предпочел не использовать «AAAAAAA_Templates» в качестве примера, хотя технически это возможно. Используя данный процесс, вы подготовите символьную ссылку на новую папку:
C:\users\<имя локального профиля пользователя>\AppData\ Roaming\Microsoft\SQL Server Management Studio\<номер версии SSMS>\Templates\SQL\<папка специализированных шаблонов>
Создание локальной символьной ссылки
Команда для создания символьной ссылки запускается из командной строки. Откройте командное окно (клавиша Window + R) и введите команду соответственно трем перечисленным выше вариантам. Синтаксис для создания символьной ссылки структурирован следующим образом:
mklink/D <расположение, в котором находится ссылка> <целевой каталог, на который указывает ссылка>
Флаг /D указывает команде, что это будет каталог (папка) символьной ссылки. Если этот флаг не установлен, то включается режим по умолчанию с попыткой создать символьную ссылку на основе одного файла.
Команды mklink для каждого из трех вариантов будут выглядеть следующим образом:
Вариант 1
mklink/D <локальный полный путь "облачной" папки>\<имя ссылки> “C:\users\<имя профиля локального пользователя>\AppData\Roaming\ Microsoft\SQL Server Management Studio\<номер версии SSMS>\Templates"
Вариант 2
mklink/D <локальный полный путь "облачной" папки>\<имя ссылки> “C:\users\\ AppData\Roaming\Microsoft\SQL Server Management Studio\< номер версии SSMS>\Templates\Sql"
Вариант 3
mklink/D <локальный полный путь
"облачной" папки>\<имя ссылки>
“C:\users\
AppData\Roaming\Microsoft\SQL
Server Management Studio\<номер
версии SSMS>\Templates\Sql\
<специальная папка>"
Созданная символьная ссылка немедленно начинает выполнять синхронизацию.
Создание удаленной символьной ссылки
На данном этапе вы увидите, что связанная папка в каталоге шаблонов существует в локальной папке «облачной» службы. Это дальний предел, до которого можно добраться с помощью символьной ссылки, не нарушая функциональности обозревателя шаблонов в удаленном экземпляре SQL Server Management Studio.
Независимо от того, какой из указанных выше вариантов вы выбрали, я хочу показать, почему передача шаблонов в «облачную» службу общего доступа — предел ваших возможностей. Чтобы извлечь файлы шаблонов в удаленный экземпляр SSMS, необходимо вручную скопировать файлы из локальной папки «облачной» службы общего доступа в нужную папку в каталог C:\users, соответствующий выбранному варианту.
В данном примере используется вариант 3, который заключается в синхронизации одной специальной папки в каталоге шаблонов. Вся последующая работа выполняется на удаленном компьютере (не том компьютере, где была сформирована исходная ссылка).
Формирование символьной ссылки на удаленном устройстве
При формировании символьной ссылки на удаленном устройстве сразу предупреждаю: не делайте этого у себя дома.
Прежде чем продолжить, рекомендую вам прочитать данную статью до конца. Как всегда, я советую никогда не использовать программный код, полученный через Интернет, даже мой, первоначально не испытав его в непроизводственной «песочнице». В данном случае я даже рекомендую не выполнять программный код вообще где бы то ни было. Причину вы поймете, прочитав статью до конца.
Я намерен показать, каким образом символьная ссылка нарушает функциональность обозревателя шаблонов SSMS, с использованием процесса синхронизации одной папки. Поэтому необходимо создать, в сущности, противоположность ссылке варианта 3, описанной выше, чтобы взять специальную папку в моей локальной домашней папке Dropbox и отправить содержимое в папку, которую нам хотелось бы иметь в каталоге шаблонов. Используя cmd.exe с правами администратора, введите следующую команду, заменив элементы внутри пары <> подходящими значениями для вашего экземпляра SSMS и имени профиля пользователя:
mklink/D "C:\users\<имя локального профиля пользователя>\AppData\ Roaming\Microsoft\SQL Server Management Studio\<номер версии SSMS>\Templates\Sql\<специальная папка> " <локальный полный путь "облачной" папки>\<имя ссылки>
На данном этапе вы получите уведомление об успешном создании символьной ссылки (экран 1).
Экран 1. Уведомление об успешном создании символьной ссылки |
Если вы ищете папку шаблонов, то увидите созданную специальную вложенную папку (экран 2).
Экран 2. Специальная папка шаблонов |
В отличие от примера в предыдущей статье, данная папка создана как ярлык и не воспринимается операционной системой как «настоящая» папка. Порождает ли это проблемы для SSMS? Конечно же, да (экран 3).
Экран 3. Сообщение об ошибке от SSMS |
Теперь вы видите, почему мне пришлось отказаться от использования символьной ссылки для решения задачи общего доступа и почему я не рекомендую выполнять этот программный код. Также следует помнить, что удаление символьной ссылки из этого каталога шаблонов не решает возникшую проблему. Вам придется удалить и заново установить SSMS, чтобы вновь воспользоваться обозревателем шаблонов.
Мне не нравится, что для решения проблемы общего доступа к шаблонам в SSMS приходится проявлять большую изворотливость. Группа разработки SQL Server может устранить этот недостаток, позволяя настраивать источник шаблонов, чтобы разместить его на томе, доступном для разнообразных устройств. Мне пришлось убедиться на собственном опыте, что это проще сказать, чем сделать. Каждый час работы программиста стоит денег, и в составе группы разработчиков SQL Server лишь ограниченное число сотрудников. Эту задачу не решить, пока ее приоритет не будет повышен. До тех пор у вас есть два варианта: стороннее программное обеспечение в сочетании с «облачными» службами общего доступа для автоматизации общего доступа к шаблонам или использование символьной ссылки для того, чтобы, по крайней мере, поместить файлы шаблонов в вашу «облачную» службу общего доступа, а затем периодически выполнять копирование файлов вручную из локальной папки «облачной» службы в вашу папку шаблонов.