Sunday, July 26, 2015

MS best practices for filestream and netapp

We are going to take into support SQL Server DB with Filestream feature. There is a page with MS best practices for mount points dedicated for SQL Server Filestream - https://technet.microsoft.com/en-us/library/dd206979(v=sql.105).aspx
Defragmentation and 64KB NTFS clusters from this page are not mandatory if you use Netapp storage for filestream.

Wednesday, May 07, 2014

Extracting ddl for db_links

To extract DDLs for database links in order to identify remote db, user account of the remote db.

SQL> SELECT DBMS_METADATA.GET_DDL('DB_LINK',a.db_link,a.owner)||'/' FROM dba_db_links a;

  CREATE DATABASE LINK "DBLINK1"
   CONNECT TO "REMOTE_DB1" IDENTIFIED BY VALUES '05E67A20C0614597BAB8BB5189C5A5207ED
BE3534CDB2D83F1'
   USING 'SERVICE_NAME1.WORLD'
/


  CREATE DATABASE LINK "DBLINK2"
   CONNECT TO "REMOTE_DB2" IDENTIFIED BY VALUES '05987E6F5E6643D409E175098963854A93C
6A5ED139BD1CA96'
   USING 'SERVICE_NAME2.WORLD'
/


  CREATE DATABASE LINK "DBLINK3"
   CONNECT TO "REMOTE_DB3"  IDENTIFIED BY VALUES '05318971FF97A614216D1EBF0F287777B
6270B7ED5307A6E112C1DEA609B7BF021'
   USING 'SERVICE_NAME3.WORLD'
/

Friday, April 25, 2014

Enabling/Disabling touchpad on HP EliteBook

Several days ago I faced a problem with the non-working touchpad on my HP EliteBook 8470p. It was not too big problem, but sometimes it is more convinient to use the touchpad than mouse. I googled the problem and found several advises. One of them was to reset the notebook by ejecting it's battery and pushing power button in 30 secs. I tried that advice and touchpad became to work, but only before OS loading. As soon as Windows 7 loaded the touchpad goes into disabling with graphical symbol with touchpad crossed by red.
In fact, the problem is resolved on software level with simultaneous double clicking on Fn keyboard and top-left part of the touchpad (with small red light indicator in case of disabled touchpad).

Wednesday, April 16, 2014

Эффект Даннинга-Крюгера и др.

Эффект Даннинга-Крюгера
«Невежество чаще порождает уверенность, чем знания»

Уверенность - связка знаний, опыта и ... доверия.

"Я подготовил список рассылки и собираюсь его отправить всем через полчаса. Ознакомься с ним и если будут дополнения, предлагаю обсудить"

Monday, April 14, 2014

Test from the office

Test from the office ... It seems the blogspot is open in our proxy today 

Saturday, April 12, 2014

SQL Server tips: sp_help... - commands

sp_helpindex 'Customer'
It allows to identify whether the 'Customer' table has any indexes
(Tip from Basic Execution Plans - http://www.youtube.com/watch?v=lvnCRhgfyV0)

sp_helpstats 'Orders'
It shows whether the 'Orders' has a statistics




Monday, March 31, 2014

Don't foget to remove backed up archivelogs!

To avoid stopping of database due to disk space overflow by archivelogs that already backed up by RMAN use:
... delete all input. For instance, 
backup database plus archivelog delete all input;

Saturday, August 24, 2013

7 лет после первого сообщения

Прочитал свое первое сообщение в этом блоге. Да, блог вести я перестал и пока не уверен возобновлю ли это. Но после 7 лет после того сообщения и того переезда, должен отметить, что решение поменять работу и город, принятое на семейном совете :), было абсолютно правильным. То, что мы получили, увидели и добились за эти 7 лет - все это результат того решения в том 2006 г. Все хорошо! Двигаемся дальше! :)

Wednesday, April 24, 2013

10775 Course (Syllabus): Сообщения об ошибках Sys.Messages


В таблице Sys.Messages SQL-сервер хранит все известные сообщения об ошибках.


 В таблице Sys.Messages заразервировано до 50тыс. строк, поэтому если мы собираемся использовать собственные ошибки, то нам необходимо их зарегистрировать под номерами боле 50000.
Добавить свое сообщение об ошибке можно при помощи процедуры sp_AddMessage

EXECUTE sp_AddMessage
  @msgnum = 50001,
  @severity =19,
  @msgtext = 'My text or description of this message',
  @with_log = 'TRUE' -- чтобы это сообщение можно было использовать в Alerts








Monday, April 22, 2013

10775 Course (Syllabus)

*.ldf and *.mdf files
There are *.mdf (main data file) and *.ldf (log data file) in MS SQL that used similar to Oracle datafiles and redo-logs. There is the checkpoint process in MS SQL that is responsible for
moving data from logfile to datafile. Is it similar to checkpoint of Oracle?
If you add second data file then its extension will be *.ndf. After adding any new data files SQL Server automatically spread data between all files.

For datafiles  size management
- Use in properties of data file Enable Autogrowth  in the Autogrowth /Maxsize
- Automatically: in Options - Auto Shrink - True (нежелательно ввиду работы этой опции на всю БД, особенно если мы располагаем файлы на разных дисковых массивах)
- Manually: Tasks - Shrink - Files (Вопрос: Как это сделать сценарием?)
Types  of Shrink:
- Release unused space (быстрый, но не эффективный, т.к. сохраняется дефрагментация)
- Reorganize pages before releaseing unused space (включается дефрагментация)
- Empty file by migrating the data to other files in the same filegroup (вытеснение данных в другие файлы этой же FG (filegroup), что полезно, если нужно удалить файл)


Recovery model - модель восстановления
Full - all operations are kept in LOG file (reliable but keeps disk space)
Simple - operations saved in DATA file are automatically removed from the LOG file



Filegroups - something similar to Tablespaces in Oracle

Backups
Что учесть при выборе стратегии восстановления?
1. Занимаемое место на диске
2. Точность восстановления
3. Скорость восстановления
4. Скорость резервирования
5. Простота стратегии

Вопросы, на которые стоит ответить прежде чем применить нужную стратегию восстановления
1. Где будут храниться резервные копии? Оперативные рядом с серверами, а долгие - подальше от офиса в DRS
2. Безопасность - нужно ли резервные копии защищать (шифровать, ограничивать физически и т.д.)
3. План восстановления - инструкция для дежурного инженера, она должна быть как можно более простой и понятной, чтобы любой инженер мог восстановить по ней данные.
4. Тестирование восстановления
Нужно определиться как делать тестовые восстановления.

Стратегии
- Full
-
http://msdn.microsoft.com/ru-ru/library/ms191239%28v=SQL.90%29.aspx

Friday, April 19, 2013

Вопросы, которые помогут избежать 3-х ошибок при JOIN-ах

Вопросы, которые помогут избежать 3-х ошибок при JOIN-ах
1) Могут ли быть категории без товаров?
2) Не используется ли у меня COUNT(*) в сочетании с внешним JOIN-ом?
3) Опасно фильтровать результаты внешнего JOIN-а, а суммировать (или аггрегировать) по внутреннему.

Модули MS SQL: представления, процедуры, функции


-- Модули:
-- Представление           VIEW
-- Процедура               Procedure
-- Функция                 Function
-- также есть не модуль, но …
-- Табличное выражение     WITH

-- Создать представление
--Drop view MyCatView
Create view MyCatView
AS
SELECT CategoryName, ProductName, UnitPrice
FROM Categories C INNER JOIN Products P
ON P.CategoryID=C.CategoryID
AND CategoryName='seafood'
Group BY CategoryName, ProductName, UnitPrice
GO ---
-- Обратиться к представлению
SELECT * from MyCatView
---
---Создать процедуру
--DROP PROCEDURE MyProc1
CREATE PROCEDURE MyProc1 @CAT int, @PROD int                                    
AS
SELECT CategoryName, ProductName, UnitPrice
FROM Categories C INNER JOIN Products P
ON P.CategoryID=C.CategoryID
-- AND CategoryName='seafood'
AND P.CategoryID > @CAT
AND P.UnitPrice > @PROD
Group BY CategoryName, ProductName, UnitPrice
GO ---

--Выполнить процедуру
EXECUTE MyProc1 5, 20

-- Создать функцию
--DROP FUNCTION MyFunc1
CREATE FUNCTION MyFunc1 (
                                  @CAT int
                                  , @PROD int                                   
                                  )
       RETURNS TABLE
AS
RETURN
SELECT CategoryName, ProductName, UnitPrice
FROM Categories C INNER JOIN Products P
ON P.CategoryID=C.CategoryID
-- AND CategoryName='seafood'
AND P.CategoryID > @CAT
AND P.UnitPrice > @PROD
Group BY CategoryName, ProductName, UnitPrice
GO ---

-- Вызвать функцию
SELECT *
FROM MyFunc1 (1,2)
WHERE UnitPrice>20

Одна задачка при помощи Subquery, JOIN и APPLY



-- Сколько в каждой категории (CategoryName)
-- товаров в продаже (Discontinued=0) и склолько снято с продаж (Discontinued=1)?
--
-- Подзапросами
SELECT CategoryName,
             (
             SELECT Count(*)
             From Products
             WHERE Discontinued=0
             AND CategoryID = Categories.CategoryID
             ) AS Cont
             ,
             (
             SELECT Count(*)
             From Products
             WHERE Discontinued=1
             AND CategoryID = Categories.CategoryID
             ) AS Disc
FROM Categories
--
-- Джойнами
SELECT CategoryName, Count(DISTINCT P1.ProductID) AS Con , Count(DISTINCT P2.ProductID) As Discont
FROM Categories C LEFT JOIN Products P1
ON C.CategoryID=P1.CategoryID
AND P1.Discontinued=0
LEFT JOIN Products P2
ON C.CategoryID=P2.CategoryID
AND P2.Discontinued=1
GROUP BY CategoryName
--
-- APPLY Джойнами
SELECT CategoryName, P1.Discon, P2.Cont
FROM Categories C CROSS APPLY (
                               SELECT Count(*) AS Discon
                               FROM Products
                               WHERE Discontinued=1
                                                  AND CategoryID=C.CategoryID
                                                  ) P1
                                  CROSS APPLY (
                               SELECT Count(*) AS Cont
                               FROM Products
                               WHERE Discontinued=0
                                                  AND CategoryID=C.CategoryID
                                                  ) P2
Order by C.CategoryName