Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Microsoft SQL Server

Автор: Bloody_Nokia_Adept
Дата сообщения: 21.08.2003 15:56
MrZeRo

Цитата:
но это не отключает журнал транзакций, а только очищает по CheckPoint активные Entry в журнале транзакций

Правильно говоришь

naPmu3aH

Цитата:
Ну прям...

Ай-ай-ай
Вот выдержка из BOL:

Цитата:
Simple Recovery
With the Simple Recovery model, the database can be recovered to the point of the last backup. However, you cannot restore the database to the point of failure or to a specific point in time. To do that, choose either the Full Recovery or Bulk-Logged Recovery model.

The backup strategy for simple recovery consists of:
*Database backups.
*Differential backups (optional).

Note This model is similar to setting the trunc. log on chkpt. database option in Microsoft® SQL Server™ version 7.0 or earlier.

И тки мне пальцем в место, где говорится, что не используется transaction log? "trunc. log on chkpt." и не использование transaction log это суть есть разные вещи. Transaction log всегда используется MS SQL.
А Simple Recovery просто на просто не использует transaction log backup.
Автор: naPmu3aH
Дата сообщения: 21.08.2003 16:19
MrZeRo
Bloody_Nokia_Adept
Ну ладно, уговорили... Не совсем в тему ляпнул

Я собственно имел в виду несколько другое (как это настроено у меня)...
При recovery model = simple логи не занимают много места, т.к. удаляются после того как уже не нужны.... Именно поэтому у меня все логи стоят в 1мег с авторасширением (целостность данных не так важна как наличие самих данных - для тестирования наших продуктов). Т.е. отключить transaction logging таки нельзя, но таким способом можно решить описанную выше проблему, правда при выполнении еще некоторых условий (например свободного места на диске)
Автор: Bloody_Nokia_Adept
Дата сообщения: 21.08.2003 16:58
naPmu3aH

Цитата:
Ну ладно, уговорили...

Хорошо, что хоть отпираться не стал, а то пришлось бы аргументировать тяжелыми металлическими предметами

Цитата:
Т.е. отключить transaction logging таки нельзя, но таким способом можно решить описанную выше проблему, правда при выполнении еще некоторых условий (например свободного места на диске)

То же не факт
Я сразу предложил как вариант делать принудительный truncate log перед выполнением операции удаления, однако если предположить, что транзакция между check point'ами наделает таки в логе на 500 мегов, то тут уж селяви... Тут действительно желательно либо отключение использования transaction log для какой-то конкретной операции (что похоже невозможно сделать), либо пойти на увеличение размера файла логов на случай больших операций.
Автор: zsv
Дата сообщения: 22.08.2003 08:02

Цитата:
Проблема: отвел под лог 500метров, запрос DELETE .. WHERE ... из большой таблицы 2млн записей по 80байт в записи минуты через две ругается, что лог заполнен.


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

Еще вопросик в догонку.
К конструкции UPDATE qq SET .... FROM qq INNER JOIN ww ON qq.x=ww.x WHERE qq.y=...
Какой индекс к таблице qq сильнее ускорит операцию по y,x или x,y
Автор: Bloody_Nokia_Adept
Дата сообщения: 22.08.2003 09:52
zsv

Цитата:
Пришлось увеличить лог в два раза

Слова не юноши, но мужа

Цитата:
Какой индекс к таблице qq сильнее ускорит операцию по y,x или x,y

По идее x/y, т.к. в INNER JOIN сначала работает условие ON, а потом лишь WHERE. В этом случае порядок использования будет именно x/y и должен подхватиться этот индекс. Однако мое ИМХО говорит мне, что я бы использовал не составной индекс, а два простых по x и y
А вообще-то сними план запроса и сам все посмотри
Автор: deaddragon
Дата сообщения: 22.08.2003 10:06
Подскажите, пожалуйста. что-то не могу найти в документации.

С какими правами заускается триггер в SQL Server. С правами пользователя который его создал или с правами пользователя при котором триггер выполняется?
Автор: MrZeRo
Дата сообщения: 22.08.2003 11:12
zsv
Оптимизатор запросов MS SQL при необходимости сам выстраивает временный индекс для выполнения запроса, если, по его мнению, это ускорит его выполнение, в плане запроса жто видно. Если ты заметил, что такой индекс в плане запроса есть, для ускорения можно сделать его постоянным.
Автор: Bloody_Nokia_Adept
Дата сообщения: 23.08.2003 07:39
deaddragon

Цитата:
С какими правами заускается триггер в SQL Server.

Вот что написано в BOL:

Цитата:
CREATE TRIGGER
Creates a trigger, which is a special kind of stored procedure that executes automatically when a user attempts the specified data-modification statement on the specified table.


Цитата:
Permissions
CREATE TRIGGER permissions default to the table owner on which the trigger is defined, the sysadmin fixed server role, and members of the db_owner and db_ddladmin fixed database roles, and are not transferable.

To retrieve data from a table or view, a user must have SELECT statement permission on the table or view. To update the content of a table or view, a user must have INSERT, DELETE, and UPDATE statement permissions on the table or view.

If an INSTEAD OF trigger exists on a view, the user must have INSERT, DELETE, and UPDATE privileges on that view to issue INSERT, DELETE, and UPDATE statements against the view, regardless of whether the execution actually performs such an operation on the view.

Итак, видим что триггер - особый вид хранимой процедуры, а они как известно выполняются с правами создателя (это в Oracle можно указать на запуск с правами исполнителя).

Это легко проверить.
Этот код выполняется от имени sa:

Цитата:
use northwind
go
create table test_table (i int)
go
create procedure test_proc as print '<<< test_proc >>>'
go
create trigger test_trig on test_table for insert as exec test_proc
go

exec sp_addlogin 'test_user', '', 'northwind'
go
exec sp_adduser 'test_user'
go
grant select, insert on test_table to test_user
go


Цитата:
New login created.
Granted database access to 'test_user'.

Этот код выполняется от имени test_user:

Цитата:
exec test_proc;
select * from test_table;
insert into test_table values(1);


Цитата:
Server: Msg 229, Level 14, State 5, Procedure test_proc, Line 1
EXECUTE permission denied on object 'test_proc', database 'Northwind', owner 'dbo'.
i
-----------

(0 row(s) affected)

<<< test_proc >>>

(1 row(s) affected)


Вроде бы все наглядно показал
Автор: zsv
Дата сообщения: 27.08.2003 16:06
Можно ли переместить файлы базы данных *.mdf, *.ldf на другой диск и как потом их подключить к серверу, если нельзя, то как мне переместить существующую базу в другое место
Автор: naPmu3aH
Дата сообщения: 27.08.2003 16:49
zsv

Цитата:
Можно ли переместить файлы базы данных *.mdf, *.ldf на другой диск и как потом их подключить к серверу

sp_deatach_db/sp_atach_db
Автор: new_yorik
Дата сообщения: 27.08.2003 16:54
или правой кнопкой по базе и деатач.
Автор: zsv
Дата сообщения: 02.09.2003 15:26
Пишу запрос

SELECT TU.TUL+' '+U.NAUL+ ' ДОМ '+D.DOM+' КВ.'+LTRIM(RTRIM(STR(J.KV)))+
CASE WHEN J.BKV IS NULL THEN '' ELSE J.BKV END AS ADRES
FROM Jit..TPOMF J,Sbyt..TPOTRF P,Sprav..TSPRDOM D,Sprav..TSPRUL U,Sprav..TSPRTUL TU
WHERE J.IDPOTR=P.IDPOTR AND P.IDDOM=D.IDDOM AND D.IDUL=U.IDUL AND TU.IDTUL=U.IDTUL

Получаю ошибку
Server: Msg 457, Level 16, State 1, Line 1
Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict.

Методом тыка нашел, что ошибка происходит в конструкции
CASE WHEN J.BKV IS NULL THEN '' ELSE J.BKV END AS ADRES
не хавает J.BKV после ELSE. Если вставляю вместо него любую строковую константу типа 'X' все работает. Колонка J.BKV имеет тип VARCHAR(1).

И самое интересное, что этот запрос работает на другой машине (на другом сервере)
SQL 2000 и там и там.
В чем могут быть грабли.
Автор: MrZeRo
Дата сообщения: 05.09.2003 15:23
zsv

Цитата:
CASE WHEN J.BKV IS NULL THEN '' ELSE J.BKV END

можно легко заменить на

Цитата:
IsNULL(J.BKV, '')

Автор: Megard
Дата сообщения: 15.09.2003 08:50
Подскажите плз, структуру базы на sql сервере для форума в общем виде.
Автор: naPmu3aH
Дата сообщения: 15.09.2003 10:55
Megard

Цитата:
Подскажите плз,  структуру базы на sql сервере для форума в общем виде

А что в IconBoard, phpBB и прочие форумы не содержат скриптов для создания базы?
Автор: Megard
Дата сообщения: 15.09.2003 12:03
Дык это ж их ставить нужно, и долго в них разбираться!
Автор: MrZeRo
Дата сообщения: 15.09.2003 14:36
Megard
На такой вопрос в несколько строк не ответишь. Все зависит от того, какая требуется функциональность.

Цитата:
Дык это ж их ставить нужно, и долго в них разбираться!

А не разбиравшись, не получится!
Автор: Megard
Дата сообщения: 16.09.2003 09:17
Меня собственно вот что интересует: каждая тема хранится в отдельной таблице или все темы хранятся в одной таблице и различаются неким идентификатором. Или как-то иначе?
Автор: BellCharris
Дата сообщения: 16.09.2003 09:54
А подскажте, как правильно устроить автоматическое ежедневное копирование базы данных независимо от пользователей. Программа куплена. Доступа к исходному коду нет.
Автор: Bloody_Nokia_Adept
Дата сообщения: 16.09.2003 10:11
BellCharris
В job поставь полный бекап базы еженедельно в ночь с воскресенья на понедельник, еженочно делай инкрементный бекап, а при совсем сильном нежелании потерять данные, то ежечасно бекап лога. Все это делай в три разных файла с опцией перезаписи. Потом уже своим батчем из ОС можешь копировать бекап куда угодно и восстанавливать из него где угодно данные
Автор: hyphen
Дата сообщения: 22.09.2003 07:54
добавляю запись командой INSERT
сервер создает для нее ключ( автоинкрементный)
Как узнать значение ключа и присвоить его переменной в хранимой процедуре?
Автор: sawamail
Дата сообщения: 22.09.2003 08:47
hyphen
@@IDENTITY
Returns the last-inserted identity value.

Syntax
@@IDENTITY

Return Types
numeric

Remarks
After an INSERT, SELECT INTO, or bulk copy statement completes, @@IDENTITY contains the last identity value generated by the statement. If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions in that they return the last value inserted into the IDENTITY column of a table.

@@IDENTITY and SCOPE_IDENTITY will return the last identity value generated in any table in the current session. However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. For more information, see IDENT_CURRENT.

Examples
This example inserts a row into a table with an identity column and uses @@IDENTITY to display the identity value used in the new row.

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

Автор: hyphen
Дата сообщения: 22.09.2003 14:27
sawamail

Thank you for your help.
Автор: Megard
Дата сообщения: 22.09.2003 16:00

Цитата:
Меня собственно вот что интересует: каждая тема хранится в отдельной таблице или все темы хранятся в одной таблице и различаются неким идентификатором. Или как-то иначе?

Ну дык, что, ни кто не знает?
Автор: zsv
Дата сообщения: 09.10.2003 08:34
Проблема: при join двух табличек по полю типа char(4) выдает ошибку
Cannot resolve collation conflict for equal to operation.
Из-за чего это может быть.
Причем создаю новую бд с такими же настройками только под логином sa, импортирую туда эти две таблички и там все работает.
Автор: naPmu3aH
Дата сообщения: 09.10.2003 14:35
zsv

Цитата:
Из-за чего это может быть

Из-за того что у них разные collation очевидно...
В JOIN'е можно использовать модификатор COLLATE 'colation_name'
Ну и почитать про "collation coercion rules" в SQL BOL.


Цитата:
Причем создаю новую бд с такими же настройками только под логином sa, импортирую туда эти две таблички и там все работает

Ага. Так работать будет под любым логином
Автор: Megard
Дата сообщения: 10.10.2003 09:31
Такой вопрос:
Длинна поля типа text ограничена восемью тысячами символов. Это значение можно изменить?
Автор: zsv
Дата сообщения: 15.10.2003 14:56
Опять проблема.
Создаю сохраненную процедурку в "своей" базе. Процедурка без входных параметров.
Прикручиваю ее в приложение. Все работает.
Как только добавляю параметр в процедурку, приложение выдает ошибку
"General SQL Error. Could not find stored procedure 'dbo.qqq;1'. ".
Параметр в приложении определил правильно.
В чем тут иогут быть грабли?
Автор: zsv
Дата сообщения: 16.10.2003 07:28
Подскажите, могу ли я каким-то образом во внешнем приложении при запуске из него сохраненной процедуры увидеть сообщения выводимые оператором PRINT и как мне в приложении подхватить значение возвращаемое сохр проц. оператором RETURN.
Внешнее приложение на Delphi.
Автор: daw
Дата сообщения: 16.10.2003 07:33

Цитата:
Длинна поля типа text ограничена восемью тысячами символов.

вообще-то:

text

Variable-length non-Unicode data in the code page of the server and with a maximum length of 231-1 (2,147,483,647) characters. When the server code page uses double-byte characters, the storage is still 2,147,483,647 bytes. Depending on the character string, the storage size may be less than 2,147,483,647 bytes.

(С) BOL

Другое дело, что есть такая вещь, как:

SET TEXTSIZE
Specifies the size of text and ntext data returned with a SELECT statement

(С) там же

Страницы: 1234567891011121314151617181920212223242526272829

Предыдущая тема: Генератор 10-ти разрядных ключей


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.