컴퓨터2010.01.27 14:00

DECLARE @backupID int
DECLARE @mediaID int
DECLARE @restoreID int

DECLARE @year char(4)
DECLARE @month char(2)
DECLARE @day char(2)
DECLARE @deleteday char(10)
 
SET @year = year(getdate())-2 -- 2년전
SET @month = month(getdate())
SET @day = day(getdate())
IF len(@month) = 1
SET @month = '0'+ @month
IF len(@day) = 1
SET @day = '0'+ @day
SET @deleteday = @year +'-'+ @month +'-'+ @day

SELECT TOP 1 @backupID = backup_set_id, @mediaID = media_set_id from msdb..backupset
where
backup_finish_date > @deleteday

SELECT TOP 1 @restoreID = restore_history_id From msdb..restorehistory
Where
restore_date > @deleteday

delete from msdb..restorefile where restore_history_id < @restoreID
delete from msdb..restorefilegroup where restore_history_id < @restoreID
delete from msdb..restorehistory where restore_history_id < @restoreID or backup_set_id < @backupID
delete from msdb..backupfile where backup_set_id < @backupID
delete from msdb..backupmediafamily where media_set_id < @mediaID
delete from msdb..backupset where backup_set_id < @backupID

use msdb
DBCC SHOWCONTIG

DBCC DBREINDEX (restorefile, '', 100)
DBCC DBREINDEX (restorefilegroup, '', 100)
DBCC DBREINDEX (restorehistory, '', 100)
DBCC DBREINDEX (backupfile, '', 100)
DBCC DBREINDEX (backupmediafamily, '', 100)
DBCC DBREINDEX (backupset, '', 100)
Posted by Zasfe
컴퓨터2009.07.01 07:00

부제 : sp_addlinkedserver 를 이용하는 방법

MSSQL 2005 에서 MSSQL 2000 서버의 특정 데이블의 데이터가 필요할 경우가 있습니다.

  1. AJAX 를 이용해서 데이터를 가져옵니다.
    이건 너무 복잡해집니다. 배보다 배꼽이 더 커질수도 있는 조짐이 보이는 방법이군요.
  2. sp_addlinkedserver 를 이용해서 오픈쿼리로 실행을 한다.
    일단 이름이 딱 입니다.


정확히 무슨 용도로 사용이 되는지 sp_addlinkedserver 프로시저의 MSSQL 도움말을 살펴보도록 하겟습니다.

MSSQL 도움말 :  sp_addlinkedserver
OLE DB 데이터 원본과 유형이 다른 분산 쿼리를 액세스할 수 있도록 해 주는 연결된 서버를 작성합니다. sp_addlinkedserver와 연결된 서버를 작성한 다음에는 이 서버가 분산 쿼리를 실행할 수 있습니다. 연결된 서버가 Microsoft® SQL Server™로 정의된 경우에는 원격 저장 프로시저를 실행할 수 있습니다.


정말 MSSQL 2005 와 MSSQL 2000 를 하나의 서버처럼 사용할수 있습니다.  물론 SQL Server 뿐만 아니라, Oracle, 액세스/Jet, ODBC 데이터 원본, 파일 시스템, Microsoft Excel 스프레드시트, IBM DB2 Database 도 연결해서(linked) 사용을 할수가 있습니다. [주:지원하는 버젼이 정말 많네요]

sp_addlinkedserver 구문sp_addserver [ @server = ] 'server'
     [ @srvproduct = ] 'product_name'
     [ @provider = ] 'provider_name'
     [ @datasrc = ] 'data_source'
     [ @location = ] 'location'
     [ @provstr = ] 'provider_string'
     [ , [ @catalog = ] 'catalog' ]


이번에 사용하게된 MSSQL 2005 에서 MSSQL 2000 으로 sp_linkedserver 로 연결해서 사용하는 방법을 공개합니다.

MSSQL 2005 에서 MSSQL 2000 으로 sp_linkedserverEXEC sp_addlinkedserver
@server='서버별칭',
@srvproduct = '',
@provider = 'SQLOLEDB',
@datasrc =
'서버주소',@provstr='Provider=SQLOLEDB;Data Source=서버주소;Initial Catalog=데이터베이스명;User id=사용자명; Password=비밀번호;',
@catalog='데이터베이스명'
GO

EXEC sp_addlinkedsrvlogin '서버별칭', 'false', NULL, '사용자명', '비밀번호'
GO

SELECT * FROM [서버별칭].[데이터베이스명].[dbo].[sysfiles]
GO


Posted by Zasfe
컴퓨터2007.11.15 14:42
exec sp_MSdbuseraccess  N'db', N'%'
 
이 프로시져는 사용자가 접근가능한 모든 데이터베이스 목록을 확인 할때 사용을 합니다.
별로 쓰일 용도가 없을것 같지만, MSSQL 관리도구중 사용이 간단한 엔터프라이즈 메니져(Enterprise Manager. 이하 EM)로
접속을 하면 모든 데이터베이스 목록을 불러오는 부분에서 사용이 됩니다.

 
Microsoft 기술문서에 적혀있는 부분을 인용하면 다음과 같습니다.
기술문서 : KB88969
CAUSE
SQL Server Enterprise Manager calls the sp_MSdbuseraccess stored procedure to determine the accessibility of each database. The sp_MSdbuseraccess stored procedure then runs against every database in SQL Server to determine the user’s permission level in that database. For x number of databases, the sp_MSdbuseraccess stored procedure will run x + 1 times. These multiple calls can take several minutes to finish. A busy system can make the calls take longer to finish.

요약하면, "SQL 서버의 EM 으로 접속을 힐때 각각의 데이터베이스에 접속이 가능한지를 확인하는 저장프로시져라서, 모든 데이터베이스에 대해서 실행이 되기때문에 데이터베이스의 총갯수 + 1번 실행이 되어 로드율이 높을경우, 결과를 확인하는것이 오래걸린다 " 라는 이야기 입니다.
 
많은 분들이 극찬을 하시는 MSSQL 도움말 을 보면 다음과 같이 나옵니다. 

MSSQL 도움말

sp_MShasdbaccess
사용자가 액세스할 수 있는 모든 데이터베이스의 이름과 소유자를 나열합니다.

구문
sp_MShasdbacess

반환 코드 값
0(성공) 또는 1(실패)

사용 권한
public 역활에 대한 기본 권한을 실행합니다.
 
빈번하게 사용되는 EM 이고, 응답시간이 느려서 EM 이 시간제한을 무제한으로 변경하여도 시간제한으로 끊어지는 현상 이 발생하는 힘든 상황에서도 이 프로시져를 수정하여서 응답속도를 줄일수만 있다면 상당한 효과를 볼수 있습니다. 사용량이 많은 SQL 서버의 경우, EM 으로의 작업이 어렵습니다. 그나마 로컬(터미널/콘솔)에서의 작업은 조금 느려도 할만하겠지만, 외부에서 EM 을 이용한 작업은 정말 눈물을 머금게합니다.
이러한 저와 같은 EM 에 최적화(?)되어 있는 사용자들에게는 반드시 필요한 부분이고, 저또한 사용자의 하나로써 적극 권장합니다.

세부 쿼리 보기


 사용방법은 간단합니다.
위의 쿼리를 쿼리분석기로 실행만 하면 바로 적용이 됩니다.

1. EM 에 접속해서 현재의 상황을 확인합니다. 2. 위의 코드를 쿼리분석기에 입력합니다.
3. 쿼리를 실행합니다. 4. EM 으로 접속을 해봅니다.


위 테스트는 일반 사용자계정을 대상으로 진행을 하였습니다. 관리자(SystemAdmin)계정은 모든 데이터베이스에 접근권한이 있기때문에 적용을 하여도 차이가 없습니다.

출처 : MS 기술문서 KB889696
Posted by Zasfe
컴퓨터2007.05.06 17:00

설치후에 MSSQL 서버를 시작하는 방법은 여러가지가 있다.

1. 서비스관리
- 아래의 메뉴중 시작 버튼을 클릭하면 MSSQL 서비스가 시작되게 됩니다.
 => 시작/계속 : 서비스가 시작되거나 중지상태에서 시작이 되게됩니다.
 => 일시 중지 : 서비스를 중지시키는것이 아니라 신규접속만을 차단합니다.
 => 중지 : 서비스를 중지시킵니다.


2. EM( 엔터프라이즈메니져)
- 서버를 선택하고 마우스 우측버튼을 클릭하면 다음과 같은 메뉴가 나오게됩니다.
 => 시작/계속 : 서비스가 시작되거나 중지상태에서 시작이 되게됩니다.
 => 일시 중지 : 서비스를 중지시키는것이 아니라 신규접속만을 차단합니다.
 => 중지 : 서비스를 중지시킵니다.


3. 명령창
- 명령행을 이용해서 서비스로 동작하는 MSSQL 서비스와 MSSQL에이젼트를 중지 시작할수 있습니다. 단, 정지 기능은 지원하지 않습니다.

C:\>net start MSSQLSERVER
요청한 서비스가 이미 시작되었습니다.

NET HELPMSG 2182을(를) 입력하면 도움말을 더 볼 수 있습니다.

C:\>net stop MSSQLSERVER
다음 서비스는 MSSQLSERVER 서비스에 영향을 받습니다.
MSSQLSERVER 서비스를 멈추면 다음 서비스도 멈추어 집니다.
(SQL서버에이젼트는 MSSQL서버서비스에 종속되어있기때문에 자동으로
중지가 됩니다.)

   SQLSERVERAGENT

이 작업을 계속하시겠습니까? (Y/N) [N]: y
SQLSERVERAGENT 서비스를 멈춥니다..
SQLSERVERAGENT 서비스를 잘 멈추었습니다.

MSSQLSERVER 서비스를 멈춥니다...
MSSQLSERVER 서비스를 잘 멈추었습니다.

C:\>net start MSSQLSERVER
MSSQLSERVER 서비스를 시작합니다..........
MSSQLSERVER 서비스가 잘 시작되었습니다.

C:\>net start SQLSERVERAGENT
SQLSERVERAGENT 서비스를 시작합니다...
SQLSERVERAGENT 서비스가 잘 시작되었습니다.

C:\>

Posted by Zasfe