#!/bin/bash #set -x #==============================================================================# # # Dieses Skript gibt das SQL-Querry aus, mit dem eine Tabelle partitioniert # werden kann. # Sollte hier eine Partition nicht mit angegeben worden sein, # die aber vorhanden ist, dann wird sie gelöscht! # Neu hinzugekommene Partitionen werden angelegt. # #==============================================================================# VERSION="v2018061400" ANZAHL="6" # Anzahl der Monate/Partitionen, die bleiben sollen DB_NAME="${1}" # Name der Datenbank DB_TABELLE="${2}" # Name der Tabelle PRI_SPALTE="${3}" # Name der Spalte, in der der Zeitpunkt liegt (diese Spalte MUSS der "PRIMARY KEY" sein oder im "PRIMARY KEY" enthalten sein) #------------------------------------------------------------------------------# if [ -z "${3}" -o "${1}" = "h" -o "${1}" = "help" ] ; then echo echo "${0} [Datenbank] [Tabelle] [Spalte]" echo "${0} buchung protokoll zeitpunkt" exit 0 fi #------------------------------------------------------------------------------# partitionen() { for i in $(seq 0 $((${ANZAHL}+1)) | tac) do #echo "i=${i}" P_JAHR="$(date -d"$((${i}-1)) month ago" +'%Y')" P_MONAT="$(date -d"$((${i}-1)) month ago" +'%m')" D_JAHR="$(date -d"$((${i}-2)) month ago" +'%Y')" D_MONAT="$(date -d"$((${i}-2)) month ago" +'%m')" echo " PARTITION p${P_JAHR}${P_MONAT} VALUES LESS THAN (UNIX_TIMESTAMP('${D_JAHR}-${D_MONAT}-01 00:00:00'))," done } #------------------------------------------------------------------------------# echo "# ${DB_NAME} / ${DB_TABELLE} / ${PRI_SPALTE}" echo " ALTER TABLE \`${DB_NAME}\`.\`${DB_TABELLE}\` PARTITION BY RANGE (UNIX_TIMESTAMP(${PRI_SPALTE})) ( $(partitionen) PARTITION p0 VALUES LESS THAN MAXVALUE ) ; "