728x90

1. mssql2000에서 백업된 파일을 가지고 mssql2005서버로 온다

 예) testdb를 백업해서 백업 파일이 testdb.bak라고 하고 c:넣었다고 가정한다.


2. restore filelistonly from disk='C:test.bak'를 해서 기존 디비 설정 정보를 확인 한다.

기존 정보가 : Date :D:Microsoft SQL ServerMSSQLDatatestdb_Data.MDF

                   Log : D:Microsoft SQL ServerMSSQLDatatestdb_Log.LDF


3. restore database testdb from disk='C:testdb.bak'

with move 'testdb_Data' to 'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDatatestdb.mdf', move 'testdb_Log' to 'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDatatestdb_log.LDF'

로 실행... (여기서 경로 및 MDF, LDF는 2005에 설정되어 있는 정보에 맞게 설정해야 된다.

파일 1에서 데이터베이스 'testdb', 파일 'testdb_Data'에 대해 33528개의 페이지를 처리했습니다 .
파일 1에서 데이터베이스 'testdb', 파일 'testdb_Log'에 대해 4개의 페이지를 처리했습니다 .
데이터베이스 'testdb'을(를) 버전 539에서 현재 버전 611(으)로 변환하는 중입니다.
데이터베이스 'testdb'을(를) 버전 539에서 버전 551(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 551에서 버전 552(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 552에서 버전 553(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 553에서 버전 554(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 554에서 버전 589(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 589에서 버전 590(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 590에서 버전 593(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 593에서 버전 597(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 597에서 버전 604(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 604에서 버전 605(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 605에서 버전 606(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 606에서 버전 607(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 607에서 버전 608(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 608에서 버전 609(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 609에서 버전 610(으)로 업그레이드하는 중입니다.
데이터베이스 'testdb'을(를) 버전 610에서 버전 611(으)로 업그레이드하는 중입니다.
RESTORE DATABASE이(가) 33532개의 페이지를 836.441초 동안 처리했습니다(0.328MB/초).

이렇게 메시지가 나올것이다.


데이터베이스가 이전 버전의 SQL Server 에서 SQL Server 2005 로 업그레이드되면 데이터베이스는 기존 호환성 수준을 유지합니다.

4. sp_dbcmptlevel 'a'


현재 호환성 수준은 80입니다.


5. sp_dbcmptlevel 'a','90' -- 호환성 수준을 MSSQL2005로 바꿉니다.

 

6.  그리고 계정을 생성한다 testid라고 만들었다고 가정한다.


7. USE db명
EXEC sp_change_users_login 'Update_One', '사용자', '로그인'

예) USE testdb
EXEC sp_change_users_login 'Update_One', 'testid', 'testid'

-- 중간의 s2kuser 정보는 DB의 사용자이고, 뒤의 s2kuser는 새로 SQL 2005에서 만들어준 로그인 이름입니다.


8. test라는 디비에 olduser라는 계정으로 사용하고 있었는데

2005로 옮겨 지면서 test라는 디비에 newuser라는 계정으로 사용을 하고 싶다면
USE test; --복원한 DB명
GO
EXEC sp_change_users_login 'Update_One', 'olduser', 'newuser';
728x90

DBCC DBREINDEX 란 무엇인가?


DBCC DBREINDEX

지정한 데이터베이스의 테이블에 대해 하나 이상의 인덱스를 다시 작성합니다.

DBCC DBREINDEX는 테이블의 특정 인덱스나 테이블에 정의된 모든 인덱스를 다시 작성합니다. DBCC DBREINDEX는 인덱스를 동적으로 다시 작성함으로써 PRIMARY KEY나 UNIQUE 제약 조건을 보장하는 인덱스를 다시 작성할 때 해당 제약 조건을 삭제했다가 다시 만들 필요가 없습니다.

DBCC DBREINDEX를 사용하면 하나의 명령문에서 테이블의 모든 인덱스를 다시 작성할 수 있습니다. 각 DROP INDEX와 CREATE INDEX 문이 원자성을 가지려면 트랜잭션을 사용해야 하는 반면, DBCC DBREINDEX는 하나의 명령문에서 작업이 수행되므로 자동으로 원자성을 갖습니다. 또한 DBCC DBREINDEX를 사용하면 각 DROP INDEX와 CREATE INDEX 문을 사용할 때보다 최적화를 더 많이 활용할 수 있습니다.

DBCC DBREINDEX는 시스템 테이블에 대해 사용할 수 없습니다.

구문

DBCC DBREINDEX
    (     [ 'database.owner.table_name'    
           
[ , index_name
                 [ , fillfactor ]
            ]
        ]
    )     [ WITH NO_INFOMSGS ]

인수

'database.owner.table_name'

지정한 인덱스를 다시 작성할 테이블의 이름입니다. 데이터베이스, 소유자, 테이블 이름은 식별자에 대한 규칙을 따라야 합니다. 자세한 내용은 식별자 사용을 참조하십시오. databaseowner 부분이 제공된 경우 전체 database.owner.table_name을 작은따옴표(')로 묶어야 합니다. table_name만 지정할 경우에는 작은따옴표를 사용할 필요가 없습니다.

index_name

다시 작성할 인덱스의 이름입니다. 인덱스 이름은 식별자에 대한 규칙을 따라야 합니다. index_name을 지정하지 않거나 ' '로 지정하면 테이블의 모든 인덱스가 다시 작성됩니다.

fillfactor

인덱스를 만들 때 각 인덱스 페이지에서 데이터 저장에 사용되는 공간의 비율입니다. 클러스터된 인덱스가 다시 작성되므로 fillfactor는 원래 채우기 비율을 다시 작성된 인덱스와 다른 클러스터되지 않은 인덱스의 새 기본값으로 대체합니다. fillfactor가 0이면 DBCC DBREINDEX는 인덱스가 만들어질 때 지정된 원래 fillfactor를 사용합니다.

WITH NO_INFOMSGS

심각도가 0에서 10 사이인 모든 정보 메시지를 표시하지 않습니다.





인덱스도 데이터입니다. 그래서 데이터가 추가되고 삭제되고 수정 됨에 따라서 인덱스 정보도 변경됩니다.
그러면 인덱스가 조각조각 찢어지는 현상이 발생하는데, 윈도우의 조각 모음과 비슷한 일을 하는게 DBREINDEX입니다.



다음은 pubs 데이터베이스의 authors 테이블에서 채우기 비율을 80으로 설정하여 au_nmind 클러스터되지 않은 인덱스를 다시 작성하는 예제입니다.

 

DBCC DBREINDEX ('pubs.dbo.authors', UPKCL_auidind, 80)

 


다음은 fillfactor 값을 70으로 사용하여 authors 테이블의 모든 인덱스를 다시 작성하는 예제입니다.


DBCC DBREINDEX (authors, '', 70)


한번에 한 서버의 모든 데이터베이스의 인덱스 재 작성하기

----------------------------------------------------------------------

/*
sp_name : usp_allReindex

sp_Explanation : 디비 서버의 모든 테이블에 대해 DBCC DBREINDEX를 실행합니다.

Input Parameters : None

Output Parameters : None

Usage : exec usp_allReindex
*/

ALTER PROCEDURE usp_allReindex
AS

-- 변수 선언
DECLARE @SQLString varchar(300), @dbname varchar(30), @tblname varchar(30)

SET NOCOUNT ON

-- 테이블 리스트 저장 테이블
CREATE TABLE #tables
(
    tblname varchar(30)
)

-- 한 서버의 디비 목록을 위한 커서 시작
DECLARE cur_dbList CURSOR
FOR
SELECT name FROM master..sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb') ---- (1)

OPEN cur_dbList
FETCH cur_dbList INTO @dbname

WHILE @@fetch_status = 0
BEGIN
    TRUNCATE TABLE #tables
    SET @SQLString = 'insert into #tables select name from ' + @dbname + '..sysobjects where type = ''U'''
    EXEC (@SQLString)

    -- 각 디비의 테이블 목록을 위한 커서 시작
    DECLARE cur_tblList CURSOR
    FOR
    SELECT tblname FROM #tables

    OPEN cur_tblList
    FETCH cur_tblList INTO @tblname

    WHILE @@fetch_status = 0
    BEGIN
        SET @SQLString = 'DBCC DBREINDEX (''' + @dbname + '..' + @tblname + ''', '''', 90)' ---- (2)
        EXEC (@SQLString)
        FETCH cur_tblList INTO @tblname
    END

    CLOSE cur_tblList
    DEALLOCATE cur_tblList

    FETCH cur_dbList INTO @dbname
END

CLOSE cur_dbList
DEALLOCATE cur_dbList

DROP TABLE #tables

---------------------------------------------------------------------------------------



1) 에서 시스템 데이터베이스의 dbid 는 4번까지 고정적입니다.
사용자 데이터베이스는 dbid가 유동적입니다. 즉 삭제하고 다시 만들면 dbid를 재 사용합니다.
그래서 명확하게 시스템 데이터베이스의 이름을 지정해서 사용자 데이터베이스를 추출 하는게 좋을 것 같습니다.

(2) 에서 DBCC DBREINDEX의 사용법을 활용해서 원하는 방식으로 인자를 주시면 됩니다.

728x90

TpmC기반의 CPU 용량산정 방법으로
tpmC에 영향을 주는 동시 사용자 수, 트랙재션 수,기본 TPC 보정, 피크시,여유율 등 보정 계수 및 적용범위를 제시하고 있으며,
CPU용량 산정식은 아래와 같다.

CPU 용량(tpmC)=동시 사용자 수 *트랙잭션 수 * 기본 TPC보정치 * Peak Time 보정치 * CPU 부하 보정치
                      * 응용프로그램 복잡도 보정치 * 네트워크 보정치 * 클러스터 보정치 * 여유율 보정치

           
메모리 용량(MB)={OS 및 기본 영역 + 프로세스 수 * 응용 프로그램 장치}
                         * 버퍼 캐쉬 보정치 * 클러스터 보정치 * 여유율 보정치       
           
디스크 용량 산정 방법은 시스템 기본 영역, S/W 영역, DB영역, SWAP영역,
                        여유율 등 보정계수 및 적용범위를 제시하고 있으며, 아울러 다음과 같은 디스크 용량산정 식을 제시하고 있다.

내장디스크 용량(MB) = {시스템 OS영역 + 응용프로그램 영역 + 상용 소프트웨어 영역}
                                * SWAP영역 * 여유율 보정치        

외장디스크 용량 ={DB여역 + 백업영역} * RAID영역 * 여유율 보정치

원문 : http://blog.naver.com/rafun/20045360827

+ Recent posts