Чтобы ответить на ваш вопрос, я никогда не слышал о технологиях, позволяющих читать LDF напрямую, но на рынке есть несколько продуктов, которые могут «клонировать» базу данных почти мгновенно, используя некоторые внутренние приемы. Имейте в виду, что данные не копируются с помощью этих инструментов, но они обеспечивают мгновенный доступ к таким случаям использования, как ваш.
Может быть несколько бесплатных способов сделать это, особенно с помощью облачных функций или функций связанных клонов, которые предлагают виртуальные машины, но в настоящее время я знаю только о платных продуктах, таких как Dell EMC, Redgate и Windocks.
Легче всего попробовать, не находясь в облаке: Red Clone SQL Clone с 14-дневной бесплатной пробной версией:
Какой-то старый код Fortran, который я видел:
integer *4 one,two,three;
c asssign one to 100 before entering the loop
one=100;
- 121 --- 521532-- Используйте системный вызов open
с Опции O_EXCL
и O_CREAT
. Если файл еще не существует, open
создаст его, откроет и вернет вам дескриптор файла; если он существует, open
завершится неудачно и для errno
будет EEXIST
.
Оттуда должно быть очевидно, как построить цикл, который пытается увеличить значение. имена файлов, пока он не вернет дескриптор файла или не создаст имя файла слишком длинное. В последнем пункте убедитесь, что вы проверили errno
, когда открыть
не удалось - EEXIST
и ENAMETOOLONG
- это только две ошибки, с которыми вы можете столкнуться .
int fd;
uint32_t counter;
char filename[1024]; // obviously unsafe
sprintf(filename, "foo.txt");
if( (fd = open(filename, O_CREAT | O_EXCL | O_EXLOCK, 0644)) == -1 && errno == EEXIST )
{
for( counter = 1; counter < UINT32_MAX; counter++ ) {
sprintf(filename, "foo-%u.txt", counter);
if( (fd = open(filename, O_CREAT | O_EXCL | O_EXLOCK, 0644)) == -1 && errno == EEXIST )
continue;
else
break;
}
}
if( fd == -1 && counter == UINT32_MAX ) {
fprintf(stderr, "too many foo-files\n");
} else if( fd == -1 ) {
fprintf(stderr, "could not open file: %s\n", strerror(errno));
}
// otherwise fd is an open file with an atomically unique name and an
// exclusive lock.
Как насчет:
По сути, вы заново создадите обработку записи атомарного файла в Cocoa. , но добавив в функцию обеспечения уникального имени файла. Большим преимуществом этого подхода является то, что в случае отключения питания или сбоя приложения во время записи неполный файл будет спрятан в папке tmp и удален системой; не оставлено пользователю, чтобы попытаться работать с ним.