Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Fragmentar Base de datos SQL Server 2008 por fechas

Estas en el tema de Fragmentar Base de datos SQL Server 2008 por fechas en el foro de SQL Server en Foros del Web. Cita: Iniciado por Libras en el link del guille viene esto: CREATE PARTITION FUNCTION [pfDatos] (datetime) AS RANGE RIGHT FOR VALUES ('20100101','20100201','20100301'); GO La anterior ...

  #31 (permalink)  
Antiguo 11/07/2012, 10:48
Avatar de lordalucardmx  
Fecha de Ingreso: junio-2012
Ubicación: Cuernavaca
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Cita:
Iniciado por Libras Ver Mensaje
en el link del guille viene esto:

CREATE PARTITION FUNCTION [pfDatos] (datetime)
AS RANGE RIGHT FOR VALUES
('20100101','20100201','20100301');
GO

La anterior Función de Particionamiento define tres valores frontera para un valor de entrada de tipo fecha, por lo tanto, tenemos las siguientes cuatro particiones:

Partición 1: Valores < 20100101 (Diciembre 2010 y meses anteriores)
Partición 2: 20100101 <= Valores < 20100201 (Enero 2010)
Partición 3: 20100201 <= Valores < 20100301 (Febrero 2010)
Partición 4: 20100301 <= Valores (Abril 2010 y meses posteriores)

[URL="http://www.guillesql.es/Articulos/Particionamiento_tablas_indices_SQLServer_Partitio ning.aspx"]http://www.guillesql.es/Articulos/Particionamiento_tablas_indices_SQLServer_Partitio ning.aspx[/URL]

saludos!
Si, ahí define 3 rangos o valores frontera, pero quiero que sea automatizado (cada 6 meses haga esa particion de todas mis tablas) por scripts o por management studio o como sea.
  #32 (permalink)  
Antiguo 11/07/2012, 11:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

lordalucardmx: Recuerdas que te dije que debian ser las particiones definidas + 1, precisamente por eso, ¿que pasa con los registros que no entran en las particiones definidas?, entran en la restante....
__________________
MCTS Isaias Islas
  #33 (permalink)  
Antiguo 11/07/2012, 12:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 2 meses
Puntos: 774
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

vuelvo a lo mismo, lo que es no leer, en los doctos dice que se deja una particion right o left para que los datos entren a estas particiones los que no caen en ninguno de los casos, ademas como bien menciona el docto del guille :

Es importante entender las funciones de particionamiento como algo dinámico, que podemos modificar con el paso del tiempo, para ajustar a las necesidades actuales de cada momento.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #34 (permalink)  
Antiguo 11/07/2012, 12:28
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Eso, eso, eso !!! (dijo el chavo del 24)
__________________
MCTS Isaias Islas
  #35 (permalink)  
Antiguo 12/07/2012, 11:07
Avatar de lordalucardmx  
Fecha de Ingreso: junio-2012
Ubicación: Cuernavaca
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Ya tengo un avance (todavía no estoy muy seguro pero ahí va):

Código SQL:
Ver original
  1. --DROP PARTITION FUNCTION part_evto_perf
  2. --DROP SCHEMA EVTO_SM
  3.  
  4. -- Funciòn para particionar las 8 tablas de eventos de perturbaciòn y 7
  5. --de perfiles històricos mediante campo fecha (por ahora del 2005 hasta 2007)
  6. --pero se requiere que se "incremente" por cada semestre que vaya a transcurrir
  7. --por tiempo indefinido
  8. CREATE PARTITION FUNCTION evto_perf_pf(datetime)
  9. AS RANGE RIGHT
  10. FOR VALUES ('20050101', '20050701', '20060101', '20060701','20070101')
  11. GO
  12.  
  13. --Creo filegroups por semestre
  14. ALTER DATABASE SERVICIO_BD
  15. ADD FILEGROUP s1_2005_fg
  16. GO
  17.  
  18. ALTER DATABASE SERVICIO_BD
  19. ADD FILEGROUP s2_2005_fg
  20. GO
  21.  
  22. ALTER DATABASE SERVICIO_BD
  23. ADD FILEGROUP s1_2006_fg
  24. GO
  25.  
  26. ALTER DATABASE SERVICIO_BD
  27. ADD FILEGROUP s2_2006_fg
  28. GO
  29.  
  30. ALTER DATABASE SERVICIO_BD
  31. ADD FILEGROUP s1_2007_fg
  32. GO
  33.  
  34. ALTER DATABASE SERVICIO_BD
  35. ADD FILEGROUP s2_2007_fg
  36. GO
  37.  
  38.  
  39. --Agrego a cada archivo un filegroup
  40. ALTER DATABASE SERVICIO_BD
  41. ADD FILE(NAME = s1_2005_BD,
  42.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s1_2005_BD.ndf')
  43. TO FILEGROUP s1_2005_fg
  44. GO
  45.  
  46. ALTER DATABASE SERVICIO_BD
  47. ADD FILE(NAME = 2S_2005_BD,
  48.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s2_2005_BD.ndf')
  49. TO FILEGROUP s2_2005_fg
  50. GO
  51.  
  52. ALTER DATABASE SERVICIO_BD
  53. ADD FILE(NAME = 1S_2006_BD,
  54.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s1_2006_BD.ndf')
  55. TO FILEGROUP s1_2006_fg
  56. GO
  57.  
  58. ALTER DATABASE SERVICIO_BD
  59. ADD FILE(NAME = 2S_2006_BD,
  60.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s2_2006_BD.ndf')
  61. TO FILEGROUP s2_2006_fg
  62. GO
  63.  
  64. ALTER DATABASE SERVICIO_BD
  65. ADD FILE(NAME = 1S_2007_BD,
  66.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s1_2007_BD.ndf')
  67. TO FILEGROUP s1_2007_fg
  68. GO
  69.  
  70. -- Filegroup exra
  71. ALTER DATABASE SERVICIO_BD
  72. ADD FILE(NAME = 2S_2007_BD,
  73.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s2_2007_BD.ndf')
  74. TO FILEGROUP s2_2007_fg
  75. GO
  76.  
  77. -- Creo un esquema de particiòn usando un file group diferente para cada particion
  78.  
  79. CREATE PARTITION SCHEME evto_perf_ps
  80. AS PARTITION evto_perf_pf
  81. TO (s1_2005_fg, s2_2005_fg, s1_2006_fg,
  82.     s2_2006_fg, s1_2007_fg, s2_2007_fg)
  83. GO


Pero veo que tengo que crear tablas y no puedo reutilizar las que ya tengo y que ya tienen datos.

y luego encontré según como pasar los datos pero no se como (lo adapté con el campo tipo fecha):

Código SQL:
Ver original
  1. -- Mover los datos al esquema particionado
  2. CREATE UNIQUE CLUSTERED INDEX ID
  3.         ON EVTO_DESB (FECHA)
  4. WITH (DROP_EXISTING = ON, ONLINE = ON)
  5.         ON evto_perf_ps (FECHA)
  6. GO

¿Cómo hago el alter table para mis tablas que no son como las del sig. ejemplo?


Código SQL:
Ver original
  1. CREATE TABLE dbo.tblDatos
  2. (
  3. ID UNIQUEIDENTIFIER NOT NULL
  4. ,DESCRIPCION VARCHAR(200) NOT NULL
  5. ,FECHA DATETIME NOT NULL
  6. ,CONSTRAINT PK_tblDatos PRIMARY KEY NONCLUSTERED (ID, FECHA) ON psDatos(FECHA)
  7. ) ON psDatos(FECHA);

Última edición por lordalucardmx; 12/07/2012 a las 11:25
  #36 (permalink)  
Antiguo 12/07/2012, 11:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

¿No valdria que te dieras una vuelta al DF o bien nos pagues viaticos a Cuernavaca y te damos toda la informacion necesaria al respecto?
__________________
MCTS Isaias Islas
  #37 (permalink)  
Antiguo 12/07/2012, 11:32
Avatar de lordalucardmx  
Fecha de Ingreso: junio-2012
Ubicación: Cuernavaca
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Si tuviera lo haría, pero bueno, seguiré buscando en internet.

Editado: Ya particioné mis tablas y si los asigna en donde quiero, ahora falta automatizarlo en la aplicación que tengo en vb.net y además en el SQL Agent.

Última edición por lordalucardmx; 12/07/2012 a las 13:31
  #38 (permalink)  
Antiguo 12/07/2012, 13:48
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Amigo, para tus aplicativos es 100% trasparente que este particionada o no tu tabla.

En cuanto a que debes crear tablas nuevas, PERO POR SUPUESTO, como quieres particionar una tabla que ya tiene datos, eso es meramente imposible.
__________________
MCTS Isaias Islas
  #39 (permalink)  
Antiguo 13/07/2012, 09:11
Avatar de lordalucardmx  
Fecha de Ingreso: junio-2012
Ubicación: Cuernavaca
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Bueno, ya metí cientos de miles de registros en diferentes fechas desde el 2005 hasta el día de hoy, y las consultas las hace trasparentes, como quiero que sea, ahora solo necesito agregarle a mi función de partición la fecha del siguiente semestre, y según yo es con esto:

Código SQL:
Ver original
  1. --Agrego el filegroup del primer semestre del 2013
  2. ALTER DATABASE SERVICIO_BD
  3. ADD FILEGROUP s1_2013_fg
  4. GO
  5.  
  6. --Asigno ese filegroup a un archivo
  7. ALTER DATABASE SERVICIO_BD
  8. ADD FILE(NAME = s1_2013_BD,
  9.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s1_2013_BD.ndf')
  10. TO FILEGROUP s1_2013_fg
  11. GO
  12.  
  13. --Al esquema le agrego el nuevo filegroup
  14. ALTER PARTITION SCHEME evto_perf_ps
  15. NEXT USED s1_2013_fg;
  16. GO
  17.  
  18. --Agrego el nuevo valor frontera
  19. ALTER PARTITION FUNCTION evto_perf_pf()
  20.     SPLIT RANGE ('20120701')

Bueno ya hice pruebas y es lo que quiero, ahora falta acomodarlo para que este en uno o varios scripts como tarea programada y que se ejecute cada 6 meses, y que cambie el valor dentro del split range, y que cambie el nombre de los nuevos filegroups, datafile y definir el next used por medio de vb.net 2010.

Una duda: ¿Puedo eliminar las particiones existentes con registros ya almacenados y que regresen al archivo principal? Solo es curiosidad.

Última edición por lordalucardmx; 13/07/2012 a las 09:30
  #40 (permalink)  
Antiguo 13/07/2012, 10:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Creo que si, lee la documentacion que te paso LIBRAS.....
__________________
MCTS Isaias Islas
  #41 (permalink)  
Antiguo 13/07/2012, 10:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 2 meses
Puntos: 774
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Cita:
Iniciado por lordalucardmx Ver Mensaje
Bueno, ya metí cientos de miles de registros en diferentes fechas desde el 2005 hasta el día de hoy, y las consultas las hace trasparentes, como quiero que sea, ahora solo necesito agregarle a mi función de partición la fecha del siguiente semestre, y según yo es con esto:

Código SQL:
Ver original
  1. --Agrego el filegroup del primer semestre del 2013
  2. ALTER DATABASE SERVICIO_BD
  3. ADD FILEGROUP s1_2013_fg
  4. GO
  5.  
  6. --Asigno ese filegroup a un archivo
  7. ALTER DATABASE SERVICIO_BD
  8. ADD FILE(NAME = s1_2013_BD,
  9.     FILENAME = 'C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\s1_2013_BD.ndf')
  10. TO FILEGROUP s1_2013_fg
  11. GO
  12.  
  13. --Al esquema le agrego el nuevo filegroup
  14. ALTER PARTITION SCHEME evto_perf_ps
  15. NEXT USED s1_2013_fg;
  16. GO
  17.  
  18. --Agrego el nuevo valor frontera
  19. ALTER PARTITION FUNCTION evto_perf_pf()
  20.     SPLIT RANGE ('20120701')

Bueno ya hice pruebas y es lo que quiero, ahora falta acomodarlo para que este en uno o varios scripts como tarea programada y que se ejecute cada 6 meses, y que cambie el valor dentro del split range, y que cambie el nombre de los nuevos filegroups, datafile y definir el next used por medio de vb.net 2010.

Una duda: ¿Puedo eliminar las particiones existentes con registros ya almacenados y que regresen al archivo principal? Solo es curiosidad.
Creo que a pesar de todo no has leido tooooda la documentacion que te pase
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #42 (permalink)  
Antiguo 13/07/2012, 10:29
Avatar de lordalucardmx  
Fecha de Ingreso: junio-2012
Ubicación: Cuernavaca
Mensajes: 38
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Fragmentar Base de datos SQL Server 2008 por fechas

Ya vi eso:

Código SQL:
Ver original
  1. DROP PARTITION FUNCTION evto_perf_pf;
  2. DROP PARTITION SCHEME evto_perf_ps;

Pero si ya tengo datos no borra porque dice que esta en uso, bueno solo era mi duda, ya tengo lo que necesitaba. Gracias a los 2 por ayudarme.

Etiquetas: backup, dividir, fragmentar, server, sql, workgroup
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:59.