DB명변경 명령어는 sp_renamedb '현재디비명', '새 디비명' 입니다.

하지만 제약 조건이 있습니다.

먼저 해당하는 DB에 Single user모드가 설정 되어야 합니다.

이를 위해서는

USE master
EXEC sp_dboption '디비명', 'single user', 'true'

하시면 됩니다. 만약 사용자가 있어 수행이 불가하다는 메세지가 나온다면?

sp_who로 누가 해당하는 DB에 붙어 있는지 보시고.. 해당하는 사용자의 spid번호를

기억하신후..

kill spid번호

명령으로 죽이신후 해 보시길 바랍니다.

싱글유져가 되었다면..

sp_renamedb를 수행하시길 바랍니다.

예제
다음은 accounting 데이터베이스의 이름을 financial로 바꾸는 예제입니다.

EXEC sp_renamedb 'accounting', 'financial'

수행후 다시 싱글 유져를 필요에 의해 풀어 주시면 되며

TRUE를 FALSE로만 바꾸신후 다시 수행하시면됩니다.
2005/06/15 14:03 2005/06/15 14:03

Ms-Sql 쿼리명령어!

MS-SQL 2005/06/15 13:50
출처 : http://www.devpia.com
아래의 SQL을 그대로 복사해서 쿼리 어널라이저에서 바로 실행할수 있도록 만들었습니다.
SQL을 잘 만들면 프로그램이 깔끔해집니다.
왜 이렇게 나오는지 곰곰히 생각은 여러분이 해봐야 겠죠.
이번 강좌는 사실 이론보다는 실무위주의 업무로 작성했습니다.
데이터베이스도 제가 만든것이 아닌 MSSQL에 기본적으로 들어 있는 Pubs데이터
베이스를 이용을 했구요.

함수에대한 자세한 설명은 MSDN이나 다른사이트 또는 책을 참조하세요.

-- DB를 선택해 내림차순으로 authors테이블의 데이터를 추출
USE pubs
SELECT *
FROM authors
ORDER BY au_lname ASC, au_fname ASC

-- 테이블명, 소유자, 타입, 만든날짜등 테이블에 관한 모든정보를 가져오는 프로시져
EXEC sp_help "테이블명"
EXEC sp_columns "테이블명"

-- 컬럼 제목바꾸기
SELECT title_id AS Title_No, pub_id AS 출판사번호, price, title FROM titles

-- TSQL 기초
-- 변수의 선언과 값의 설정 DECLARE, SET, SELECT
DECLARE ";@º?嗤?quot; "자료형", ";@º?嗤?quot; "자료형"
SET ";@º?嗤?quot; = 값
SELECT ";@º??quot;

DECLARE @id int, @name varchar(10)
SET @id = 1
SET @name = '조준철'
SELECT @id, @name

-- 사용자변수와 시스템 함수(시스템 변수/전역변수)
-- SQLServer는 정의된 변수만을 전역으로 사용할수 있다.
@@error
@@identity
@@lock_timeout
@@nestlevel
@@rowcount
@@trancount

-- decimal, numeric 숫자유형(차이없음)
-- decimal(precision, scale) 예를들어 (10, 5)의 경우 전체 10자리 숫자중에서
-- 소수점 이하 5자리를 사용할수 있는 의미
decimal[(p, [s])] precision의 범위, 1~38 디폴트 : 18, scale의 범위 1~precision, 디
폴트 : 0

-- SELECT에서의 자료형 바꾸기
--1)
SELECT title_id AS 타이틀넘버
, pub_id AS 출판사번호
, price
, CONVERT(char(30), title) AS 줄인제목
FROM titles
--2)
SELECT title_id AS 타이틀넘버
, pub_id AS 출판사번호
, price
, SUBSTRING(title, 1, 30) AS 줄인제목
FROM titles

-- CONVERT() / CAST()
-- CONVERT()는 자료형을 바꾸는 함수로 다양한용도로 사용한다. 이기능은 SQLServer의
고유
-- 기능이기 때문에 ANSI와 호환되지않는다.
CONVERT (datatype[(length)], expression[, style])
-- style은 날짜함수에서 사용한다.

SELECT CONVERT(int, '32.2')
SELECT CONVERT(int, '32')
SELECT CONVERT(varchar(5), 32.2)
SELECT CONVERT(float, 32)

-- 숫자에 대한 산술적 연산함수(자주 쓰는것만...)
CEILING(numeric_expr) -- 주어진값보다 크거나 같은, 가장작은 정수
FLOOR(numeric_expr) -- 주어진값보다 작거나 같은, 가장큰 정수
RAND(seed) --램덤수
ROUND(numeric_expr, length) --반올림

SELECT title_id, price, FLOOR(price) AS Floor, CEILING(price) AS ceiling, ROUND
(price, )
AS Round FROM titles

-- 문자에 대한 함수(자주 쓰는것만...)
+
CHARINDEX('pattern', expression)
LEFT(character_expression, integer_expression)
LEN(string_expression)
LOWER(char_expression)
LTRIM(char_expression)
PATINDEX('%pattern%', expression)
REPLACE(string_expression, string_expression, string_expression)
REPLICATE(char_expression, integer_expression)
RIGHT(char_expression, integer_expression)
RTRIM(char_expression)
SPACE(integer_expression)
STUFF(char_expression, start, length, char_expression)
SUBSTRING(_expression, start, length)
UPPER(char_expression)

-- 날짜에 대한 함수
SELECT CONVERT(varchar(30), GETDATE(), 9)
SELECT CONVERT(varchar(30), GETDATE(), 2)
SELECT CONVERT(varchar(30), GETDATE(), 102)

-- 조건에 맞는 행 가져오기
SELECT title_id, qty FROM sales WHERE qty >= 20
SELECT title_id, qty FROM sales WHERE title_id = 'bu1032'

-- 비교문 (=, >, <, >=, <=, <>, !=, !>, !<)
-- 정렬
SELECT title_id, qty FROM sales ORDER BY qty ASC
SELECT title_id, qty FROM sales ORDER BY qty DESC

-- 몇 개만 가져오기
SELECT TOP 5 title_id, qty FROM sales

-- 범위
SELECT title_id, qty FROM sales WHERE qty EETWEEN 10 AND 20
SELECT title_id, qty FROM sales WHERE qty >= 10 AND qty <= 20

-- 목록
SELECT title_id, qty FROM sales WHERE title_id IN ('BU1032', 'BU1111', 'MC3021')
SELECT title_id, qty FROM sales WHERE title_id = 'BU1032' OR 'BU1111' OR 'MC3021'

-- 문자열 / LIKE와 패턴 매칭
/*
_(underscore) : 어떤 것이든 한문자가 와야한다.
% : 아무것도 없는 경우를 포함하여 어떤것이든 상관없다.
[] : []안에 있는 글자들
[^] : ^다음에 있는 글자를 제외한 다른것이 와야한다.
book_
book%
%book%
[st]ing
[b-f]ing
M[^c]%
자세한 것은 온라인 설명서 참조
*/
SELECT title_id, title FROM titles WHERE title LIKE '%computer%'
SELECT title_id, title FROM titles WHERE title LIKE 'computer%'
SELECT title_id, title FROM titles WHERE title LIKE 'computer_'

-- PATINDEX는 해당 패턴이 다음 문자열에 있는지 알려준다.
SELECT PATINDEX('%Mi%', 'James Mike')

-- 중복된 행 제거 - DISTINCT
SELECT DISTINCT title_id FROM sales ORDER BY title_id

-- 요약 정보 처리
/*
AVG ([ALL|DISTINCT] expression) 표현식의 전체나 각각의 평균값
COUNT ([ALL|DISTINCT] expression) 표현식의 전체나 각각의 개수
COUNT (*) 선택된 모든행의 개수 주의 NULL값을 계산되지 않는다.
MAX (expression) 표현식에서 가장 큰값
MIN (expression) 표현식에서 가장 작은 값
SUM ([ALL|DISTINCT] expression) 수치 표현식에서 전체나 각각의 합계
*/
SELECT MAX(qty), MIN(qty) FROM sales
SELECT COUNT(*) FROM sales
SELECT COUNT(title_id) FROM sales

-- ISNULL NULL 값을 다른값으로 바꾸기
-- ISNULL (표현식, 널일때의 값)
SELECT AVG(ISNULL(price, 0)) FROM sales

-- GROUP BY / HAVING
SELECT title_id, sum(qty) AS SUMqty FROM sales GROUP BY title_id HAVING SUM(qty)
>= 30
SELECT title_id, sum(qty) AS SUMqty FROM sales GROUP BY ALL title_id

-- COMPUTE / COMPUTE BY
-- 그룹별로 상세 내역과 그룹 합계를 한꺼번에 출력하는 함수
SELECT type, title_id, price FROM titles ORDER BY type COMPUTE avg(price) BY type

-- ROLLUP과 CUBE (표현식은 10개를 넘을수 없다. GROUP BY ALL을 사용할수 없다.)
-- 각 평균과 각 type별 그룹 평균
SELECT type, pub_id, AVG(price)
FROM titles GROUP BY type, pub_id WITH ROLLUP

-- 각 평균과 각 type별 그룹 평균
SELECT type, pub_id, AVG(price)
FROM titles GROUP BY type, pub_id WITH CUBE

-- JOIN (조인)
-- INNER JOIN (두 값을 비교해 일치하는 데이터만을 가져온다.)
SELECT title_ price, pub_name FROM titles, publishers
WHERE titles.pub_id = publishers.pub_id

SELECT title_id price, pub_name FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id

-- OUTER JOIN (어느 한쪽의 데이터를 가져온다.)
SELECT title_id price, pub_name FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id

-- 흐름제어문
/*
BEGIN...END 명령문의 시작 / 끝을 블록화한다.
IF ELSE 조건에 맞는 처리를 한다.
WHILE 조건에 맞는동안 반복한다.
BREAK 가장안쪽의 WHILE반복을 무조건 빠져나간다.
CONTINUE 가장안쪽의 WHILE 반복을 무조건 다시 시작한다.
RETURN 무조건 끝낸다.
GOTO 라벨 무조건 라벨부분으로 건너뛴다.
WAITFOR 지정된만큼 지연을 한다.
CASE 주어진 조건에 따라 다른 처리를 한다.
/**/ 주석처리
-- 주석처리
DECLARE 변수를 정의 한다.
SET(SELECT) 변수를 초기화한다.
EXECUTE 사용자정의 함수, 시스템 프로시저, 사용자정의 저장프로시저, 확장프로시저를
수행한다.
PRINT 주어진 메시지를 출력한다.
RAISERROR 주어진 메시지나 오류번호를 출력한다.
FORMATMESSAGE 정의된 번호의 메시지에서 오류메시지를 만든다.
*/
2005/06/15 13:50 2005/06/15 13:50
출처 : http://www.devpia.com

SQL Server 7.0이 C:\Mssql7에 설치되어 있고 모든 데이터베이스 및 로그 파일도
C:\Mssql7\Data에 설치되어 있다고 가정하고, 모든 데이터베이스의 데이터 및 로그 파
일을 E:\Sqldata로 이동합니다.

먼저 모든 데이터베이스, 특히 master 데이터베이스의 백업을 현재 위치에 만듭니다.

사용자에게는 시스템 관리자(sa) 권한이 있어야 합니다 .

데이터베이스의 모든 데이터 파일 및 로그 파일의 이름과 현재 위치를 알고 있어야 합
니다.

참고: sp_helpfile 저장 프로시저(Stored Procedure)로 데이터베이스에서 사용되는 모
든 파일의 이름과 현재 위치를 결정할 수 있습니다.

use
go
sp_helpfile
go

이동하려는 데이터베이스에 대해 단독 액세스 권한이 있어야 합니다.

이 과정 중에 문제가 발생하고 이동한 데이터베이스를 액세스할 수 없거나 또는 SQL
Server를 시작할 수 없으면 SQL Server 오류 로그 및 SQL Server 7.0 온라인 설명서에
서 발생한 오류의 정보를 확인하십시오.


1. 사용자 데이터베이스 이동
Mydb.mdf 데이터 파일과 Mydblog.ldf 로그 파일이 있는 mydb 데이터베이스를 이동
합니다. 이동하려는 데이터베이스에 추가 데이터 또는 로그 파일이 있으면
sp_attach_db 저장 프로시저(Stored Procedure)에 모든 추가 파일의 이름을 쉼표로 구
분하여 명시하십시오. sp_detach_db 프로시저는 데이터베이스에 들어 있는 파일을 나
열하지 않으므로 데이터베이스에 포함되는 파일의 수가 문제가 되지 않습니다.
데이터베이스를 다음과 같이 분리합니다.

use master
go
sp_detach_db "mydb"
go

다음에는 현재 위치(C:\Mssql7\Data)의 데이터 및 로그 파일을 새 위치(E:\Sqldata)
에 복사합니다.

다음과 같이 새 위치로 이동한 파일에 해당하는 데이터베이스를 부착(Attach)합니다.

use master
go
sp_attach_db "mydb","E:\Sqldata\mydbdata.mdf","E:\Sqldata\mydblog.ldf"
go

sp_helpfile을 사용하여 새 위치에 제대로 파일이 이동되었는지 확인합니다.
use mydb
go
sp_helpfile
go

filename 열 값은 새 위치를 반영해야 합니다.

2. MSDB, Pubs 및 Northwind 이동
사용자 데이터베이스를 이동시킬 때 동일한 프로시저를 수행하십시오.MSDB의 경
우 SQL Server 에이전트는 현재 실행되지 않아야 합니다. 그렇지 않으면
sp_detach_db 저장 프로시저(Stored Procedure)는 다음 메시지와 함께 실패합니다.

Server:Msg 3702, Level 16, State 1, Line 0
Cannot drop the database "msdb" because it is currently in use.
DBCC execution completed. If DBCC printed error messages, contact your system
administrator.

3. 마스터 데이터베이스의 이동
SQL Server Enterprise Manager(엔터프라이즈 관리자)에 있는 마스터 데이터 및
로그 파일의 경로를 변경합니다.

참고 : 여기서 오류 로그의 위치도 선택적으로 변경할 수 있습니다.

Enterprise Manager(엔터프라이즈 관리자)에 있는 SQL Server를 마우스 오른쪽 단추
로 누르고 바로 가기 메뉴의 Properties를 누릅니다.

Startup Parameters 단추를 누르면 다음 항목을 볼 수 있습니다.
-dC:\MSSQL7\data\master.mdf
-eC:\MSSQL7\log\ErrorLog
-lC:\MSSQL7\data\mastlog.ldf

-d는 마스터 데이터베이스 데이터 파일의 정식 경로입니다.

-e는 오류 로그 파일의 정식 경로입니다.

-l는 마스터 데이터베이스 로그 파일의 정식 경로입니다.

이러한 값을 다음과 같이 변경합니다.

Master.mdf 및 Mastlog.ldf 파일에 대한 현재 항목을 제거합니다.

새 위치를 지정하는 새 항목을 추가합니다.

-dE:\SQLDATA\master.mdf
-lE:\SQLDATA\mastlog.ldf

SQL Server를 중지합니다.

Master.mdf 및 Mastlog.ldf 파일을 새 위치(E:\Sqldata)에 복사합니다.

SQL Server를 다시 시작합니다.

4. Model 데이터베이스 이동
Model 데이터베이스를 이동하려면 SQL Server는 master 이외의 데이터베이스를
복구하지 않도록 3608 추적 플래그(Trace Flag)와 함께 시작되어야 합니다.

참고 : 이 때 사용자 데이터베이스를 액세스할 수 없습니다. 이 추적 플래그(Trace
Flag)를 사용하는 중에는 다음 단계 외의 작업은 수행하지 말아야 합니다. To add
trace flag 3608 as a SQL Server startup parameter, perform the following steps:
In SQL Server Enterprise Manager, right-click the server name and click
Properties on the shortcut menu.

On the General tab, click Startup Parameters.

Add a new parameter as -T3608.

3608 추적(Trace) 플래그를 추가한 후 다음 단계를 수행합니다.
SQL Server를 중지하고 다시 시작합니다.

다음과 같이 model 데이터베이스를 분리합니다.

use master
go
sp_detach_db "model"
go

C:\Mssql7\Data에서 E:\Sqldata로 Model.mdf 및 Modellog.ldf를 이동합니다.

다음과 같이 model 데이터베이스를 다시 부착합니다.

use master
go
sp_attach_db "model","E:\Sqldata\model.mdf","E:\Sqldata\modellog.ldf"
go

Enterprise Manager(엔터프라이즈 관리자)의 시작 매개 변수 상자에서 _T3608 추적 플
래그(Trace Flag)를 제거합니다.

SQL Server를 중지하고 다시 시작합니다.

sp_helpfile을 사용하여 새 위치에 파일이 제대로 이동되었는지를 확인할 수 있습니
다.
use model
go
sp_helpfile
go

5. Tempdb 이동
ALTER DATABASE 문을 사용하여 tempdb 파일을 이동할 수 있습니다.
다음과 같이 sp_helpfile을 사용하여 tempdb 데이터베이스에 대한 논리 파일 이름을
알아냅니다.

use tempdb
go
sp_helpfile
go

다음과 같이 ALTER DATABASE 문에 논리 파일 이름을 지정합니다.

use master
go
Alter database tempdb modify file (name = tempdev, filename
= "E:\Sqldata\tempdb.mdf")
go
Alter database tempdb modify file (name = templog, filename
= "E:\Sqldata\templog.ldf")
go

변경 내용을 확인하는 다음 메시지가 표시되어야 합니다.
File "tempdev" modified in sysaltfiles. Delete old file after restarting SQL
Server.

File "templog" modified in sysaltfiles. Delete old file after restarting SQL
Server.
tempdb에서 sp_helpfile을 사용하면 SQL Server를 다시 시작할 때까지는 이러한 변경
내용을 확인할 수 없습니다.

SQL Server를 중지하고 다시 시작합니다.

이상이 DB를 새로운 위치로 옮기는 작업이었습니다
2005/06/15 13:49 2005/06/15 13:49