Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
Добрый день!
Помогите пожалуйста разобраться с задачкой.
Заранее спасибо.

training kit
You are configuring an appropriate transaction isolation level for a session. You want to ensure the following:

1. Statements in the transaction should not be able to read data altered by other transactions if those transactions have not yet been committed.
2. Statements in other transactions should not be able to read data altered by the current transaction until the current transaction commits.
3. Other transactions should be able to insert new rows that meet the search conditions of statements in the current transaction.

Which of the following Transact-SQL statements can you use to accomplish this task?

1. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
2. SET TRANSACTION ISOLATION LEVEL SNAPSHOT
3. SET TRANSACTION ISOLATION LEVEL READ COMMITTED
4. SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
5. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE


Я провел следующие тесты для проверки первых двух условий. (Третье условие не проверяем оно выполняется для всех уровней кроме serializable)
И по мне так достаточный уровень изоляции это read committed.
Программа говорит что правильный ответ это repeatable read.
use tempdb
go

create table dbo.TestTable ( id int primary key, value char(10) )
go
insert into dbo.TestTable ( id, value ) values ( 1, 'a' ), ( 2, 'b' ), ( 3, 'c')
go

-- session 1

set transaction isolation level read committed

begin transaction

	update dbo.TestTable
	set value = 'd'
	where id = 1

-- rollback transaction



-- session 2
set transaction isolation level read committed

begin transaction

	select *
	from dbo.TestTable

-- rollback transaction


Так же есть объяснение
training kit
You use the SET TRANSACTION ISOLATION LEVEL REPEATABLE READ statement when you want to ensure that statements cannot read data altered by other transactions not yet committed and that other transactions cannot modify data read by the current transactions until the current transaction commits. When the REPEATABLE READ isolation level is set, it is possible for other transactions to insert new rows that meet the search conditions of statements included in the current transaction.

You use the SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED statement when you want to allow statements to read rows altered by other transactions, but those transactions have not yet been committed.

You use the SET TRANSACTION ISOLATION LEVEL READ COMMITTED statement when you want to ensure that statements cannot read data altered by other transactions when those transactions have not yet been committed. When you set the READ COMMITTED transaction level, data can be altered by other transactions between individual statements within the current transaction.

You use the SET TRANSACTION ISOLATION LEVEL SNAPSHOT statement when you want to ensure that data read by any statement in a transaction will be transactionally consistent with how that data existed at the start of the transaction. SNAPSHOT transactions do not block other transactions from writing data.

You use the SET TRANSACTION ISOLATION LEVEL SERIALIZABLE statement when you want to ensure that Transact-SQL statements cannot read data that has been altered but not committed,
12 июн 13, 12:57    [14424379]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
гавнакодер прямоходящий
Guest
SomeUser0,

автор вероятно трудности понимания слова altered в предложении второго условия

2... "... not be able to read data altered by the current transaction..."...

я тоже подумал как и вы, хотя сомнения были что пиндосы намекают на repeatable read

если altered понимать как измененные, то read commited достаточно для удовлетворения, если как прочитанные или измененные, то конечно repeatable read.
12 июн 13, 14:06    [14424570]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
гавнакодер прямоходящий
Guest
гавнакодер прямоходящий,

Вот выдержка из кунилингвы

alter ['ɔːltə]
1) изменять; менять; видоизменять, вносить изменения, переделывать change a coat — перешить пальто altered automobile — усовершенствованный автомобиль Syn: change , adapt , make over , customize
2) меняться; изменяться The city has altered very much since 1990. — Город сильно изменился с 1990 года. 
3) кастрировать, холостить (скот)
12 июн 13, 14:10    [14424580]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
ну, знаете
Guest
гавнакодер прямоходящий,

то, что просто SELECTED, оно никак не ALTERED.

скорее, если это дамп, скачанный из известного места,
так там и не такого начитаешься.
по крайней мере для 70-432 были еще те перлы.
потому как вообще кто их туда кладет, дампы?
было даже так:
2 дампа с одним и тем же вопросом и в одном один ответ, в другом другой.
12 июн 13, 14:15    [14424588]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
ну, знаете
Guest
гавнакодер прямоходящий
гавнакодер прямоходящий,

Вот выдержка из кунилингвы

alter ['ɔːltə]
1) изменять; менять; видоизменять, вносить изменения, переделывать change a coat — перешить пальто altered automobile — усовершенствованный автомобиль Syn: change , adapt , make over , customize
2) меняться; изменяться The city has altered very much since 1990. — Город сильно изменился с 1990 года. 
3) кастрировать, холостить (скот)

и где тут намек на просто выборку?
12 июн 13, 14:17    [14424593]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
недоумивающий гавнакодер
Guest
гавнакодер прямоходящий,

2 Statements in other transactions should not be able to readalter data alteredreaded by the current transaction until the current transaction commits.
12 июн 13, 14:18    [14424595]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
гавнокадер фиксящий
Guest
ну, знаете,

да в том то и дело что они или опечатались или подразумевали не пойми что, бо даже кунилингва однозначно говорит что alter - изменение
12 июн 13, 14:20    [14424602]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
Это не дамп
это из приложения (диска) к официальной книге
Training Kit (Exam 70-461): Querying Microsoft SQL Server 2012
http://www.amazon.com/Training-Kit-Exam-70-461-Microsoft/dp/0735666059
12 июн 13, 14:57    [14424691]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
недоумивающий гавнакодер
гавнакодер прямоходящий,

2 Statements in other transactions should not be able to readalter data alteredreaded by the current transaction until the current transaction commits.


Да, похоже на опечатку...
Спасибо!
12 июн 13, 15:08    [14424718]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
никому нельзя верить
Guest
SomeUser0,

у меня тоже есть книженция:
http://www.amazon.com/Real-MCTS-Server-2008-70-432/dp/1597494208

и вот шо там пишуть (стр. 275):
The Bulk-Logged recovery model is similar to Full recovery model, except that
nonlogged operations are performed as nonlogged.

офигеть, да? уже появились нелогируемые операции.
вот сейчас если вспомню, напишу какое у них еще чудное слово там встретилось неоднократно.
лезет в голову TALE of the log вместо TAIL, но не оно,
но в том же духе.
короче, за время чтения мне стало понятно, что диктовал один,
а писал другой, кто вообще некоторые слова чисто со слуха писал и не угадал.

так и тут, скорее всего, как выше предложили, который писал,
ворон считал, отвлекся, 2 слова в вопросе местами переставил.
12 июн 13, 15:14    [14424732]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
SomeUser0,

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

Заметь, что одно из условий, второе, удовлетворить невозможно в принципе.
12 июн 13, 20:31    [14425338]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
никому нельзя верить,

вы еще 70-141 (если не слероз ) в первой редакции не пробовали сдавать,особенно секцию с визульными ефектами ..там таоке было в свое время ;)))
12 июн 13, 21:47    [14425526]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
А вот еще один вопрос.
Кодовое название "Подляна"

The Hovercraft.Wages table records the salaries paid to workers at Contoso. Workers get either a daily rate or a yearly salary. This table contains the following columns:

EmployeeID, daily_rate, yearly_salary

Workers get only one type of income rate, and the other columns in their records have values of NULL. For example, if a worker has an entry in the yearly_salary column, the daily_rate column will have an entry of NULL. You want to run a query calculating each employee's total salary based on the assumption that people work 5 days a week, 52 weeks per year.

Which of the following statements could you use to accomplish this goal?


Фактически два правильных варианта, но один из них более правильный!

You should use the SELECT EmployeeID, CAST(COALESCE(daily_rate * 5 * 52, yearly_salary) AS money) AS 'Total Salary' from Hovercraft.Wages; statement. COALESCE enables you to use the first value that is not NULL. This expression will calculate each employee's total salary independently of whether he or she is paid by a daily rate or a yearly salary.

You should not use the SELECT EmployeeID, CAST(ISNULL(daily_rate * 5 * 52, yearly_salary) AS money) AS 'Total Salary' from Hovercraft.Wages; statement. You should use COALESCE rather than ISNULL. ISNULL enables you to replace NULL values with another value. COALESCE enables you to use the first value that is not null.
13 июн 13, 00:08    [14425840]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
training kit
You are configuring an appropriate transaction isolation level for a session. You want to ensure the following:

1. Statements in the transaction should not be able to read data altered by other transactions if those transactions have not yet been committed.


Для этого достаточно read commited.

training kit
2. Statements in other transactions should not be able to read data altered by the current transaction until the current transaction commits.


Это write commited для данной транзакции, и read commited для других транзакций. Но мы не можем, конфигурируя уровень изоляции тразнакции для данной сессии влиять на видимость меняемых нами данных другими транзакциями.
Для этого надо менять их изоляции, а не данной сессии.
Это условие мы должны игнорировать, поскольку на наш уровень изоляции оно не накладывает дополнительные требования,
мы остаёмся на read commited.

training kit
3. Other transactions should be able to insert new rows that meet the search conditions of statements in the current transaction.


Это требование не накладывет на нашу транзакцию никаких новых ограничений. Обратное условие требовало бы от нас уровень SERIALIZABLE.


Итак, минимально необходимый нам уровень -- read commited.
Но мы можем использовать и более высокие уровни, если они не будут нарушать наши условия:

training kit
Which of the following Transact-SQL statements can you use to accomplish this task?

1. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


Не можем использовать, минимально необходимый нам уровень -- read commited.

training kit
2. SET TRANSACTION ISOLATION LEVEL SNAPSHOT


Можем использовать, ни одно из условий не нарушается, и SNAPSHOT выше нужного нам read commited.

training kit
3. SET TRANSACTION ISOLATION LEVEL READ COMMITTED


Можем использовать.

training kit
4. SET TRANSACTION ISOLATION LEVEL REPEATABLE READ


Тоже можем использовать, ни одно из условий не нарушается, и REPEATABLE READ выше нужного нам read commited.

training kit
5. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE


НЕ можем использовать, нам бы было хорошо (SERIALIZABLE выше нужного нам read commited, но нарушилось бы требование (3),
поскольку другие транзакции не могли бы вставлять записи, подходящие нам.

SomeUser0
И по мне так достаточный уровень изоляции это read committed.


Ты абсолютно прав. ДОСТАТОЧНЫЙ, но там спрашивается Which of the following Transact-SQL statements can you use to accomplish this task?
Какие мы можем использовать уровни изоляции из всех перечисленных ?

SomeUser0
Программа говорит что правильный ответ это repeatable read.


Ну как бы это один из правильных ответов.

training kit
You use the SET TRANSACTION ISOLATION LEVEL REPEATABLE READ statement when you want to ensure that statements cannot read data altered by other transactions not yet committed and that other transactions cannot modify data read by the current transactions until the current transaction commits. When the REPEATABLE READ isolation level is set, it is possible for other transactions to insert new rows that meet the search conditions of statements included in the current transaction.


Как бы гон. REPEATABLE READ не требует, чтобы "other transactions cannot modify data read by the current transactions until the current transaction commits". требуется, чтобы только данная транзакция читала те же самые данные, если она захочет прочитать их ещё раз. Поведение MSSQL будет на данном уровне такое, но это не требование стандарта, это реализация MSSQL-я, она может быть запросто другой в следующей версии. Например, REPEATABLE READ можно реализовать как SNAPSHOT.

А что это за такая training kit ?
13 июн 13, 01:55    [14426030]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
MasterZiv
А что это за такая training kit ?

14424691

MasterZiv
Как бы гон. REPEATABLE READ не требует, чтобы "other transactions cannot modify data read by the current transactions until the current transaction commits". требуется, чтобы только данная транзакция читала те же самые данные, если она захочет прочитать их ещё раз. Поведение MSSQL будет на данном уровне такое, но это не требование стандарта, это реализация MSSQL-я, она может быть запросто другой в следующей версии. Например, REPEATABLE READ можно реализовать как SNAPSHOT.

Да, но в данном случае речь идет только о MS SQL и только о 2012 версии, так что тут придраться не к чему.
13 июн 13, 08:15    [14426169]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
traning kit
The Hovercraft database has three tables related to Hovercraft design, OldDesign, CurrentDesign, and FutureDesign. Some designs are present in more than one table. You want to generate a list of all items in the FutureDesign table as well as FutureDesign items that are present in both the OldDesign and CurrentDesign tables.

Which of the following Transact-SQL statements can you use to accomplish this goal?

1. SELECT HovercraftModelID, Name FROM Hovercraft.OldDesign INTERSECT SELECT HovercraftModelID, Name FROM Hovercraft.CurrentDesign EXCEPT SELECT HovercraftModelID, Name FROM Hovercraft.FutureDesign
2. SELECT HovercraftModelID, Name FROM Hovercraft.OldDesign UNION SELECT HovercraftModelID, Name FROM Hovercraft.CurrentDesign INTERSECT SELECT HovercraftModelID, Name FROM Hovercraft.FutureDesign
3. SELECT HovercraftModelID, Name FROM Hovercraft.OldDesign INTERSECT SELECT HovercraftModelID, Name FROM Hovercraft.CurrentDesign INTERSECT SELECT HovercraftModelID, Name FROM Hovercraft.FutureDesign
4. SELECT HovercraftModelID, Name FROM Hovercraft.OldDesign INTERSECT SELECT HovercraftModelID, Name FROM Hovercraft.CurrentDesign UNION SELECT HovercraftModelID, Name FROM Hovercraft.FutureDesign (Правильный ответ)


Тут опять опечатка, должно быть вроде так:
traning kit
Some designs are present in more than one table. You want to generate a list of all items in the FutureDesign table as well as FutureDesign design items that are present in both the OldDesign and CurrentDesign tables.
13 июн 13, 08:52    [14426229]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
SomeUser0
MasterZiv
А что это за такая training kit ?

14424691

MasterZiv
Как бы гон. REPEATABLE READ не требует, чтобы "other transactions cannot modify data read by the current transactions until the current transaction commits". требуется, чтобы только данная транзакция читала те же самые данные, если она захочет прочитать их ещё раз. Поведение MSSQL будет на данном уровне такое, но это не требование стандарта, это реализация MSSQL-я, она может быть запросто другой в следующей версии. Например, REPEATABLE READ можно реализовать как SNAPSHOT.

Да, но в данном случае речь идет только о MS SQL и только о 2012 версии, так что тут придраться не к чему.



Придраться есть к чему, потому как изоляциями транзакций вообще этого нельзя добиться, того, что они требуют.
Если бы речь шла о хинтах блокировок, тут другое дело. А изоляции транзакций в принципе не ограничивают запись, они даже формулируются в терминах феноменов чтения.
13 июн 13, 09:58    [14426497]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
SomeUser0,

А статус какой у этой книги? Просто книга?
13 июн 13, 10:01    [14426509]     Ответить | Цитировать Сообщить модератору
 Re: Practice test (Traning kit SQL 2012): Вопрос про транзации  [new]
SomeUser0
Guest
MasterZiv
SomeUser0,

А статус какой у этой книги? Просто книга?

Официальная книга для подготовки к экзамену 70-461

в разделе Books
http://www.microsoft.com/learning/en/us/exam-70-461.aspx#fbid=p8Z03ewzVwp
13 июн 13, 10:10    [14426546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить