Как я уменьшаю свою Базу данных SQL Server?

ВАЖНО

. Лучший способ предотвратить SQL Injection - использовать подготовленные выражения вместо экранирования , поскольку демонстрирует принятый ответ .

Существуют библиотеки, такие как Aura.Sql и EasyDB , которые позволяют разработчикам легче использовать подготовленные инструкции. Чтобы узнать больше о том, почему подготовленные операторы лучше в останавливать SQL-инъекцию , см. этот mysql_real_escape_string() обход и недавно зафиксированные уязвимости Unicode SQL Injection в WordPress .

Предотвращение впрыска - mysql_real_escape_string ()

У PHP есть специально созданная функция для предотвращения этих атак. Все, что вам нужно сделать, это использовать функцию функции mysql_real_escape_string.

mysql_real_escape_string берет строку, которая будет использоваться в запросе MySQL, и возвращает ту же строку со всеми попытками внедрения SQL безопасно сбежал. В принципе, это заменит эти неприятные кавычки ('), которые пользователь может ввести с помощью заменителя в MySQL, сэкономленная цитата.

ПРИМЕЧАНИЕ: вы должны подключиться к базе данных, чтобы использовать эту функцию!

// Подключение к MySQL

$name_bad = "' OR 1'"; 

$name_bad = mysql_real_escape_string($name_bad);

$query_bad = "SELECT * FROM customers WHERE username = '$name_bad'";
echo "Escaped Bad Injection: 
" . $query_bad . "
"; $name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; $name_evil = mysql_real_escape_string($name_evil); $query_evil = "SELECT * FROM customers WHERE username = '$name_evil'"; echo "Escaped Evil Injection:
" . $query_evil;

Более подробную информацию вы найдете в MySQL - SQL Injection Prevention .

50
задан fthiella 16 November 2013 в 02:51
поделиться

9 ответов

DBCC SHRINKDATABASE работы для меня, но это - его полный синтаксис:

DBCC SHRINKDATABASE ( database_name, [target_percent], [truncate] )

, где target_percent желаемый процент свободного пространства, оставленного в файле базы данных после того, как база данных была уменьшена.

И truncate параметр может быть:

NOTRUNCATE

Причины освобожденное файловое пространство, которое будет сохранено в файлах базы данных. Если не определенный, освобожденное файловое пространство выпущено к операционной системе.

TRUNCATEONLY

Причины любое неиспользуемое место в файлах данных, которые будут выпущены к операционной системе и уменьшениям файл до последней выделенной степени, уменьшая размер файла, не перемещая данных. Никакая попытка не предпринята для перемещения строк к освобожденным страницам. target_percent проигнорирован, когда TRUNCATEONLY используется.

... и да no_one является правильным, уменьшение datbase является не очень хорошей практикой becasue, например:

уменьшение на файлах данных является отличными способами представить значительную логическую фрагментацию, becasue это перемещает страницы от конца выделенного диапазона файла базы данных к куда-нибудь впереди файла...

база данных уменьшения может иметь большое последствие на базе данных, сервер.... думают много об этом, прежде чем Вы сделаете это!

в сети существует много блогов и статей об этом.

5
ответ дан fthiella 7 November 2019 в 10:37
поделиться

Это может казаться причудливым, но это работало на меня, и я записал программу C# для автоматизации этого.

Шаг 1: Усеките журнал транзакций (Создайте резервную копию только журнала транзакций, включив опцию удалить неактивные транзакции)

Шаг 2: Выполните уменьшение базы данных, переместив все страницы в запуск файлов

Шаг 3: Усеките журнал транзакций снова, поскольку шаг 2 добавляет записи в журнале

Шаг 4: Выполните уменьшение базы данных снова.

Мои разделенные вниз кодируют, который пользуется библиотекой SQL DMO, следующие:

SQLDatabase.TransactionLog.Truncate();
SQLDatabase.Shrink(5, SQLDMO.SQLDMO_SHRINK_TYPE.SQLDMOShrink_NoTruncate);
SQLDatabase.TransactionLog.Truncate();
SQLDatabase.Shrink(5, SQLDMO.SQLDMO_SHRINK_TYPE.SQLDMOShrink_Default);
11
ответ дан Bork Blatt 7 November 2019 в 10:37
поделиться
ALTER DATABASE MyDatabase SET RECOVERY SIMPLE

GO

DBCC SHRINKFILE (MyDatabase_Log, 5)

GO

ALTER DATABASE MyDatabase SET RECOVERY FULL

GO
94
ответ дан 7 November 2019 в 10:37
поделиться

Необходимо будет также уменьшить отдельные файлы данных.

Это - однако не хорошая идея уменьшить базы данных. Например, см. здесь

4
ответ дан no_one 7 November 2019 в 10:37
поделиться

Также необходимо изменить минимальный размер файлов данных и файлов журнала. DBCC SHRINKDATABASE уменьшит данные внутренний файлы, которые Вы уже выделили. Для уменьшения файла к размеру, меньшему, чем его минимальный размер, используйте DBCC SHRINKFILE и определите новый размер.

0
ответ дан Otávio Décio 7 November 2019 в 10:37
поделиться

Вот другое решение: Используйте Мастер Печати по базе данных для экспорта схемы, безопасности и данных к sql сценариям. Можно тогда вывести текущий DB из эксплуатации и воссоздать его со сценариями.

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

2
ответ дан 7 November 2019 в 10:37
поделиться

Удалите данные, убедитесь, что модель восстановления проста, затем выполните сжатие (работает либо сжатие базы данных, либо сжатие файлов). Если файл данных все еще слишком велик, И вы используете кучи для хранения данных, то есть без кластеризованного индекса для больших таблиц, тогда у вас может возникнуть проблема с удалением данных из кучи: http: // support. microsoft.com/kb/913399[12116 impression

0
ответ дан 7 November 2019 в 10:37
поделиться

Вы должны использовать:

dbcc shrinkdatabase (MyDB)

Он сжимает файл журнала (держите проводник Windows открытым и наблюдайте, как это происходит).

4
ответ дан 7 November 2019 в 10:37
поделиться

Я большой поклонник JGroups, но я недавно открыл лещина и, вероятно, даст ему попробовать. Это может быть то, что ты ищешь.

-121--2929555-

Замечательно, что абстрактные репозитории можно использовать Декоратор для реализации таких сквозных задач, как кэширование.

Как пример, учитывая интерфейс IMyRepository, вы можете создать MyCachingRepository как этот псевдо кодекс:

public class MyCachingRepository : IMyRepository
{
    private readonly IMyRepository repository;

    public MyCachingRepository(IMyRepository repository)
    {
        if(repository == null)
        {
            throw new ArgumentNullException("repository");
        }

        this.repository = repository;
    }

    public Foo SelectFoo(int id)
    {    
        Foo foo = ... // attempt to get foo from cache

        if // foo is not it cache
        {
            foo = this.repository.SelectFoo(id);
            // save foo in cache
        }
        return foo;
    }
}

В этом примере, GetFoo определен IMyRepository. Обратите внимание, что декорированный репозиторий вызывается только в том случае, если предмет не найден в кэше.

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

В нашем текущем проекте мы использовали этот подход, и что очень приятно, так это то, что мы могли бы сделать это в качестве последующей мысли, даже не касаясь оригинальных репозиториев. Это соответствует духу Принципа открытия/закрытия .

-121--4244832-

«Поэтому разумно предположить, что много места теперь должно быть извлекаемым».

Извиняюсь, если я неправильно понял вопрос, но вы уверены, что это база данных, а не файлы журнала, которые используют пространство? Проверьте, в какой модели восстановления находится база данных. Скорее всего, это в Full, что означает, что файл журнала никогда не усекается. Если вам не нужна полная запись каждой транзакции, вы можете перейти на Simple, что приведет к усечению журналов. В процессе можно сжать базу данных. При условии, что все пойдет правильно, процесс выглядит следующим образом:

  1. Резервное копирование базы данных!
  2. Переход на простое восстановление
  3. Сокращенная база данных (щелкните правой кнопкой мыши на БД, выберите все задачи > сокращенная база данных - > установите значение 10% свободного пространства)
  4. Убедитесь, что пространство было восстановлено, если не требуется выполнить полное резервное копирование

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

  1. Backup
  2. Kill all connections to the db
  3. Detach db (щелкните правой кнопкой мыши > Отсоединить или щелкните правой кнопкой мыши > All Tasks > Отсоединить)
  4. Delete the log (ldf) file
  5. Reattach the db
  6. Change the recovery метода

etc.

2
ответ дан 7 November 2019 в 10:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: