Actualmente tenemos varias bases de datos, pero nos gustaría combinarlas y, en su lugar, separar nuestros contextos de dominio mediante esquemas.
En MS SQL Server 2008 R2, ¿cómo puedo reubicar todo el contenido de un esquema en otro de forma masiva?
Por ejemplo, todas las tablas, vistas, procedimientos, índices, etc. que creamos en el dbo
esquema ahora vivirán en el foo
esquema.
EDITAR: Quería aclarar sobre la base de los excelentes comentarios de AaronBertrand. Esta no es una situación de arrendamiento múltiple. Nuestra situación es donde los complementos de herramientas internas fueron desarrollados de forma aislada por desarrolladores que no fusionaron sus tablas en la base de datos de la herramienta.
sql-server-2008-r2
schema
Mateo
fuente
fuente
Respuestas:
El concepto básico es realmente bastante simple: genera un script desde
sys.objects
ysys.schemas
que construyeALTER SCHEMA TRANSFER
declaraciones. Entonces, por ejemplo, tiene tres objetos en eldbo
esquema y desea moverlos todos alblat
esquema:El siguiente código:
Producirá este script (pero quizás no en este orden):
(Es posible que desee agregar filtros adicionales para omitir objetos en el
dbo
esquema que no desea mover, omitir ciertos tipos de objetos (por ejemplo, tal vez todas sus funciones son funciones de utilidad y no necesitan moverse), generar el secuencia de comandos ordenada por tipo de objeto, etc.)Pero hay un par de problemas al mover todos sus objetos a un nuevo esquema:
Probablemente mucho su código seguirá haciendo referencia a estos objetos, ya que
dbo.object
no hay una manera fácil de solucionarlo, excepto la fuerza bruta. Probablemente pueda encontrar todas las ocurrencias de maneradbo.
bastante fácil, pero también pueden devolver falsos positivos, comoEXEC dbo.sp_executesql
,dbo.
en los comentarios, referencias verdaderas a objetos que permanecen en eldbo.
esquema, etc.Sus dependencias probablemente estarán completamente fuera de control, pero no lo he probado a fondo. Sé que en este escenario:
Las claves externas en realidad migran más suavemente de lo que esperaba (con la advertencia que estoy probando en una versión mucho más reciente que usted). Pero debido a que el código
blat.pX
todavía hace referenciadbo.bar
, obviamente ejecuta el procedimiento:Va a producir este error:
Y consultas de dependencia, como:
Producirá este error:
Y consultando la vista:
Produce estos errores:
Entonces, esto podría implicar mucha limpieza. Y después de haber arreglado todas las referencias de objetos, probablemente querrá volver a compilar todos los módulos y actualizar todas las vistas en el nuevo esquema. Puede generar un script para eso bastante similar al ejemplo anterior.
fuente