SQL Server MSDN : https://technet.microsoft.com/ko-kr/library/gg699618(v=sql.110).aspx


웹 관련 프로그래머라면...

페이징 처리에 상당한 고민을 하게된다...


데이터가 작다면 상관이 없겠지만... 데이터가 1만건은 기본이고, 100만건 1000만건 정도일 경우...

view화면을 보는 이용자 입장에서는 10건에서 최대 50건 정도를 확인하는데...

100만건을 조회하고 싶지는 않을 것 이다


또한, 시스템도 그 만큼 부하를 받을 것 이다.


my-sql 이나 오라클 같은 경우 limit 과 같은 페이징을 쉽게 할 수 있는 명령 문을 제공한다.

하지만, MSSQL은 지금 것 페이징이라는 것을 제공하지 않았다... 하지만...


하지만...

 

올래~ 홧팅2


2012버전 부터 페이징 관련 명령을 제공한다.


[ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n][<offset_fetch>] ] 
<offset_fetch> ::= {OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }    [FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY]}


예 )

다음 예에서는 ORDER BY와 함께 OFFSET-FETCH 절을 사용하는 방법을 보여 줍니다.

예제 1 정렬된 결과 집합에서 첫 10개 행을 건너뛰고 나머지 행을 반환합니다.

SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS;

예제 2- 정렬된 결과 집합에서 첫 10개 행을 건너뛰고 다음 5개 행을 반환합니다.

SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;


* 자세한 내용은 위에 링크되어 있는 MSDN을 참조 하자!



NameAliasesDescription
bigintint8signed eight-byte integer
bigserialserial8autoincrementing eight-byte integer
bit [ (n) ] fixed-length bit string
bit varying [ (n) ]varbitvariable-length bit string
booleanboollogical Boolean (true/false)
box rectangular box on a plane
bytea binary data ("byte array")
character varying [ (n) ]varchar [ (n) ]variable-length character string
character [ (n) ]char [ (n) ]fixed-length character string
cidr IPv4 or IPv6 network address
circle circle on a plane
date calendar date (year, month, day)
double precisionfloat8double precision floating-point number (8 bytes)
inet IPv4 or IPv6 host address
integerintint4signed four-byte integer
interval [ fields ] [ (p) ] time span
line infinite line on a plane
lseg line segment on a plane
macaddr MAC (Media Access Control) address
money currency amount
numeric [ (ps) ]decimal [ (ps) ]exact numeric of selectable precision
path geometric path on a plane
point geometric point on a plane
polygon closed geometric path on a plane
realfloat4single precision floating-point number (4 bytes)
smallintint2signed two-byte integer
serialserial4autoincrementing four-byte integer
text variable-length character string
time [ (p) ] [ without time zone ] time of day (no time zone)
time [ (p) ] with time zonetimetztime of day, including time zone
timestamp [ (p) ] [ without time zone ] date and time (no time zone)
timestamp [ (p) ] with time zonetimestamptzdate and time, including time zone
tsquery text search query
tsvector text search document
txid_snapshot user-level transaction ID snapshot
uuid universally unique identifier
xml XML data



create table test(

   testId serial

)



serial 타입으로 하면 mysql의 auto_increment 값과 같이 자동 증가 된다.



'데이터베이스 Study > PostgreSQL' 카테고리의 다른 글

PostgreSQL 자료형 타입  (3) 2013.03.06
서버의 IP가 변경되거나,
Administrator 계정의 비밀번호가 변경 되었을 경우 이러한 메시지가 뜬다.
 
이건 꼭 수동 변경을 해줘야 한다는 이야기 ㄱ-;;;
MSSQLServer 와 SQLServerAgent 의 두곳을 작업 해 줘야 한다.

변경 방법은

1. 제어판의 관리도구에서 서비스 선택
2. MSSQLServer 와 SQLServerAgent 에서 오른쪽 클릭하여 속성 선택
3. 로그온 탭에서 암호 및 암호 확인 텍스트 상자에 바뀐 암호를 입력
4. 확인 (안전빵으로 서버 재 부팅) 이렇게 변경하니 잘 된다.

오라클 DB에 ODBC로 연결해야 하는 상황이고.. 클라이언트급 개인 PC에는 오라클이 깔려있지 않음..

여러가지 상황으로 클라이언트에는 오라클 Client를 설치하지 않고.. ODBC만을 연결하여 접속해야 함

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

1. Oracle.com에서 접속용 기본 프로그램 및 ODBC를 다운 받음.

다운받는 위치: htttp://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html


금일현재 Version 11.1.0.7.0가 최신버젼


가장 기본적인 프로그램 (무조건 받을 것.)
instantclient-basic-win32-11.1.0.7.0.zip (46,734,555 bytes)

가장 기본적인 프로그램 (경량버전)
instantclient-basiclite-win32-11.1.0.7.0.zip (17,667,999 bytes)

JDBC 클라이언트 패키지
instantclient-jdbc-win32-11.1.0.7.0.zip (1,562,261 bytes)

SQL*Plus 패키지
instantclient-sqlplus-win32-11.1.0.7.0.zip (789,617 bytes)

개발자 관련 SDK 패키지
instantclient-sdk-win32-11.1.0.7.0.zip (1,068,348 bytes)

개별접속용 ODBC 패키지 - 내가 필요한 기능
instantclient-odbc-win32-11.1.0.7.0.zip (728,899 bytes)

WRC 패키지
instantclient-tools-win32-11.1.0.7.0.zip (6,009 bytes)


내가 필요한 것은 기본 프로그램과 ODBC용 패키지로 2개를 다운받아 아래 디렉토리에 압축을 해제함

d:\oracle\instentclient_11_1   (요걸 잘 기억 해 주시고...)


2. 환경변수 지정

시작-> 내컴퓨터 -> 속성

사용자 삽입 이미지


고급 -> 환경변수
사용자 삽입 이미지


시스템 변수 새로 만들기
사용자 삽입 이미지


시스템 변수 생성
사용자 삽입 이미지


ORACLE_HOME=d:\Oracle\instantclient_11_1

TNS_ADMIN=d:\Oracle\instantclient_11_1 <- tnsnames.ora 파일이 위치할 폴더

NLS_LANG=KOREAN_KOREA.KO16MSWIN949   <- 한글관련 설정

PATH=d:\Oracle\instantclient_11_1 <- 기존 패스에 추가해야 함


Path만 기존 변수명에 추가하고 나머지는 새로이 생성


3. 레지스트리 변경

1) 드라이브 설치했다고 변경 (아래 표내의 글을 복사해서 drive.reg 파일로 저장해서 더블클릭 해도 됨)

 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"Oracle in InstantClient_11_1"="Installed"


2) Oracle in InstantClient_11_1 세부내역 추가 (아래글을 복사해서 dddd.reg 파일로 저장해 더블클릭 해도 됨)

 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Oracle in InstantClient_11_1]
"APILevel"="1"
"CPTimeout"="60"
"ConnectFunctions"="YYY"
"Driver"="d:\\Oracle\\instantclient_11_1\\SQORA32.DLL"
"DriverODBCVer"="03.51"
"FileUsage"="0"
"Setup"="d:\\Oracle\\instantclient_11_1\\SQORAS32.DLL"
"SQLLevel"="1"

 

3. TNS 서비스 파일 등록

아래 내용을 tnsnames.ora 파일을 작성하여 d:\Oracle\instantclient_11_1 디렉토리에 저장

oracleTest1 =
(DESCRIPTION =
     (ADDRESS_LIST =
          (ADDRESS =
               (PROTOCOL = TCP)
                    (HOST = xxx.xxx.xxx.xxx)
                    (PORT = 1521)
                )
          )
     (CONNECT_DATA =
          (SERVICE_NAME = DB_NAME)
     )

)




oracleTest1 : 사용할 TNS 서비스명으로 임의로 자기가 설정
xxx.xxx.xxx.xxx : oracle이 설치된 서버 IP 주소
1521: 포트번호
DB_NAME : 접속할 DB명


여기까지 진행이 되었으면 컴퓨터를 재부팅 함... (환경변수 등이 반영되도록...)


4. ODBC 데이터 원본 관리자 실행
시작-> 제어판-> 데이터 원본 (ODBC) - 추가

사용자 삽입 이미지


드라이버를 선택 - 하단 그림은 Oracle in OraClient10g로 되어 있으나 위에 레지스트리를 정상적으로 적용했다면 Oracle in InstantClient_11_1로 나옴...

사용자 삽입 이미지



드라이버 정보 입력 - TNS Service Name이 중요함
사용자 삽입 이미지


비밀번호를 입력하고....
사용자 삽입 이미지



접속 성공...
사용자 삽입 이미지


후... 이 문제에 대해서 삽질을 한 것이 얼마 전 일이었는데...
솔직히 근본적인 원인을 잡아내지 못하고 차선책을 선택했던 것 같다.


보통 ODP.NET을 이용하고자 하는 사람들은 Oracle Client 버전이나 Server버전을 설치한 사람들이 대부분일 것이다.

우리 회사 환경 또한 그러했기 때문에 ODP.NET을 설치 할 때 폴더 설정을 Default로 해서 그대로 깔게 되었을 때 발생되는
문제에 대해서는 무지하였다.

솔직히 인터넷에도 잘 나와 있는 부분이 없었다. ( 내가 검색을 잘 못했던 걸까...? )

설치 폴더 설정을 기본으로 했을 때 발생 되는 문제...

-> TNSNAMES.ORA를 찾아가는 환경변수가 등록 되어 기존에 쓰던 것을 옮겨서 새로 생긴

D:\oracle\product\10.2.0\client_1\network\admin 폴더에 넣던가 내 컴퓨터 > 속성 > 고급 > 환경변수 셋팅에서 path 부분을 다시 원래의 패스
D:\oracle\product\db_1\network\admin 폴더로 잡아줘야한다.

여튼 !! 이런 문제를 근본적으로 설치 시에 해결하는 방법이 있더라.
모든 삽질은 해결책을 찾고 나면 허무한 법.

자자~ 서론이 길었다.

이제 모든 분들께서 기다리시는 해결책을 알아보자.
ODP.NET설치 Setup.exe를 실행한다.


사용자 삽입 이미지

 

다음을 클릭한다.

 

사용자 삽입 이미지

 

본인의 PC는 Vista이기 때문에 마리님의 포스트에 적힌 대로 설치를 하였다.

odp.net\stage\product.xml을 찾은 후 다음을 누른다.

 

사용자 삽입 이미지

 

Oracle Data Access Component 10.2.0.2 21을 선택하고 다음을 누른다.

 

사용자 삽입 이미지


요것이 핵심 되시겠다~! 상단의 이름은 콤보 박스를 선택하여 나오는 이름을 클릭한다.

굳이 그렇게 안해도 되는 듯하나, 찜찜하다. 그냥 선택해주자.

그리고~! 밑에 경로는 현재 깔려있는 Client or Server의 패스를 넣어 주시면 되겠다.

단순히 D:\Oracle << 아니다... 패스를 잘봐라...

D:\Oracle\Product\10.2.0\db_1까지이다..

ps : 선택해주면 자동으로 패스가 잡히지만 다시한번 확인해 주시길 바랍니다^^


ODP.NET 다운로드: http://www.oracle.com/technology/software/tech/windows/odpnet/utilsoft.html

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

가끔 이미 설지가 되어 있는 서버설치쪽 경로에 설치를 하게 되면...
설지가 되지않는다...

그럴땐 그냥 과감히...
기본 경로로 설치를 하고 "TNSNAMES.ORA" 파일을 위에서 지정한 기본 폴더로 변경 하고 서비스 리스타드 하면 가장 손쉽게 해결이 된다.

10g 부터는 pump 기능이 제공된다.
기존까지 사용하던 exp, imp 는 클라이언트에서 실행하지만 pump 는 서버에서만 실행가능하다.

백업하기(expdp)
순서는 다음과 같다.
  1. expdp 실행을 위한 ORACLE_HOME 환경변수 설정(필요하다면)
  2. sysdba 권한으로 펌프할 디렉토리 생성하기
  3. 사용자에게 디렉토리에 대한 접근/작성 권한 할당하기
  4. pump export 하기
다음은 예제다. 진한 글씨를 임의의 설정에 맞추면 된다.

ORACLE_HOME 환경변수가 맞추어져있다면 다음 과정은 생략 가능하다. 다음은 AIX 의 경우 샘플이다.
$>export ORACLE_HOME=/app/oracle/product/102/db

관리자 계정으로 접속
SQL> conn /as sysdba 를 실행하거나 $>sqlplus sys/11234@ORCL as sysdba 를 실행하여 접속
Connected.

pump 를 위한 directory 생성
SQL> create  directory pump_dir as '/tmp/backup/oracle';
Directory created.

pump 를 위한 권한 설정
SQL> grant read,write on directory pump_dir to slothink;

Grant succeeded.

SQL> exit

$ mkdir /tmp/backup/oracle

펌프 export
$ expdp slothink/1234@ORCL directory=pump_dir dumpfile=exp.`date "+%Y-%m-%d"`.pump.dmp job_name=backup_job

만약 하위버젼이나 특정버젼으로 import 를 시킬 계획이라면 버젼을 명시해줘야한다.

$ expdp slothink/1234@ORCL directory=pump_dir dumpfile=exp.`date "+%Y-%m-%d"`.pump.dmp job_name=backup_job version=10.2.0.4

특정한 테이블을 export 시킬 계획이라면 테이블을 입력한다.
$ expdp slothink/1234@ORCL tables=MY_LOVE_SLOTHINK directory=pump_dir dumpfile=exp.`date "+%Y-%m-%d"`.pump.dmp job_name=backup_job version=10.2.0.4


복구하기(impdp)
$ impdp slothink/1234 directory=pump_dir dumpfile=exp.2009-11-04.dmp job_name=backup_job


오라클 내에 있는 테이블 전체를 백업해보자.


1. EXP

1.1. 기본 타입

C:\> exp 유저아이디/패스워드 file=파일명.dmp  (파일명의 경우 임의로 정하면 된다.)


1.2. 실행

사용자 삽입 이미지


2. IMP

2.1. 기본타입

C:\> imp 유저아이디/패스워드 file=파일명.dmp  (파일명의 경우 백업한 파일명을 사용한다.)


2.2. 실행

사용자 삽입 이미지


3. 백업 파일의 위치

C:\Documents and Settings\윈도우계정(i.e. Administrator)


export 시키면 기본적으로 저장되어지는 위치로, import 시에도 같은 위치에 저장하는 편이 속 시원하다.

실제로 다른 위치에 놓고 실행해 본 경험은 없다.


사용자 삽입 이미지


MySQL 에서는 create table 명령문 내에서 auto-increment 를 사용할 수 있지만,
ORACLE에서는 그게 불가능한 것처럼 보인다.
이건 내가 알고 있는 지식일 뿐, oracle도 create table 명령문 내에서 가능할 수도 있다.

아무튼. create table 내에서 auto-increment를 세팅할 수 없다는 가정 하에, sequence와 trigger를 통해서 어떻게 auto-increment를 생성할 수 있는지 알아보도록 하자.

먼저, auto-increment를 시행해볼 table을 만들자.

SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));

Table created.

id column을 auto incrment 하고 싶다고 가정하자.

id가 1로부터 시작해서 1씩 증가할 수 있도록 sequence를 생성한다.


SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;

Sequence created.


이제 test 테이블에 insert 할 때마다 id column에 이 sequence 를 적용시킬 수 있도록 trigger를 걸어보도록 하자.

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;


Trigger created.

이제 test 테이블에 새로운 row가 insert 될 때마다 이 test_trigger가 실행될 것이고, 결과적으로 id가 자동으로 1씩 증가하게 된다.
 
insert 문에서 id의 값으로는 null을 주거나, 다른 값(즉, name) 만 설정해 주어도 된다.

확인을 해보자.


SQL> INSERT INTO test (name) VALUES ('Jon');

1 row created.

SQL> INSERT INTO test (name) VALUES (’Bork’);

1 row created.

SQL> INSERT INTO test (name) VALUES (’Matt’);

1 row created.

SQL> SELECT * FROM test;

ID NAME
???- ??????????
1 Jon
2 Bork
3 Matt


자! 모든 게 완성되었다!

다만, 이번 예제의 경우 column이 id와 name, 이렇게 2개밖에 안되어 id를 제외한 모든 column을 일일이 나열해 insert를 해줄 수 있었지만, column의 수가 많을 경우, 이와 같은 작업이 불가능하다. 이럴 경우, id의 값 대신 null을 주면 된다. 즉, 다음과 같다.

SQL> INSERT INTO test (name) VALUES ('Jon');

-->

SQL> INSERT INTO test VALUES (null, 'Jon');


OK???

사용자 삽입 이미지


유저 생성

CREATE USER [ user_name ] IDENTIFIED BY [ user_password ];

유저 권한주기

GRANT connect, resource, dba TO  [ user_name ];

생성한 유저로 접속

CONN [ user_name ] / [ user_password ]

생성한 유저 확인


이건 위에 생성한 유저로 접속과 반대로 해도 괜찮다.

아니 먼저 확인하고 접속하는게 맞는거 같긴한데 다시 하기 귀찮다.


지울때는 그냥

CONN system / password

DROP USER [ user_name ];


물론 위에 쓴 모든 예시문의  [ ]는 제외하고 쓴다. ( 이런 사람 있어 꼭 ㅋㅋㅋ )

그리고 대소문자 구분은 안하는거 같다.

사용자 삽입 이미지
 

Update를 하는데 그냥 WHERE조건으로 하는게 아니라 다른 테이블과 JOIN을 해서 그 값으로 현재테이블의 값에 넣어야 할 필요가 있어서 사용하게 되었다. 평소에 쓰던 방식과 좀 달라서 어려웠었다.

  1. BEGIN TRAN  
  2.     UPDATE table_1  
  3.     SET column1 = column2  
  4.     FROM table_1 AS A  
  5.     INNER JOIN table_2 AS B  
  6.     ON A.column3 = B.column4  
  7.     INNER JOIN table_3 AS C  
  8.     ON B.column5 = C.column6  
  9. ROLLBACK TRAN  

컬럼수가 많아서 좀 복잡하긴 한데 그냥 내가 쓴 쿼리를 그대로 써 넣었다. (업데이트가 제대로 될지 몰라서 트랜잭션을 걸었다. ㅎㅎ)

컬럼수가 좀 많고 복잡해서 이해가 어려울것 같다. 일단 JOIN이 2번 된 형태이다. table_1에 있는 column1을 table_3에 있는 column2의 값으로 모두 입력해 넣으려고 한 쿼리이다.

일단 업데이트문 자체는 그대로 써주고 그 이하는 SELET문에 쓰는것처럼 FROM절을 사용한다. table_1을 table_2와 JOIN하고 그걸 다시 table_3와 JOIN해서 table_3에 있는 column2를 사용하는 것이다. 이름이 겹치지 않아서인지 column1과 2 따로 별칭을 써주지 않아도 되었다.

평소에 쓰던 쿼리들과는 형태가 좀 다른 형태라 이해가 쉽지 않지만 이렇게 쓰면 Update에 JOIN을 해서 사용할 수 있다.
MS SQL 서버 2000으로 수업프로젝트를 진행하는 가운데 원격컴퓨터에서 서버로 접근이 되지 않아서 고생을 꽤나 했다. 코딩도 바빠죽겠는데 별게 다 신경쓰이게 해서....

SQL 서버가 있는 PC에 2대의 PC가 접근했는데 1대는 문제없이 접근했는데 1대는 서버를 찾을수가 없었다.

항상 트러블슈팅은 어려운 거지만 여기저기 찾아보다가 서비스팩으로 해결했다. 시간이 급해서 정확히 어떤 버그인지까지는 확인하지 못했지만 서비스팩을 업해주지 않으면 생기는 문제이다.

난 전에 SP4가 문제생긴게 있어서 SP3로 업해주었더니 쉽게 해결 할 수 있었다. ㅡ..ㅡ

다른 조에선 비슷한 문제를 SP4를 깔아서 해결했으니 3이든 4든 업데이트 해주면 원격연결 문제는 쉽게 해결할 수 있으리라 생각된다.


덧) 추가적으로 SQL서버를 사용할때 서버이름으로 접근을 하게 되는데 이 이름은 내컴퓨터에서 속성을 눌러서 바꾸어 줄 수 있다.

사용자 삽입 이미지


전체 컴퓨터 이름이 SQL 서버도 사용하는 이름이다. 이름이 맘에 들지 않는다면 변경에 들어가서 바꾸어주면 되고 이름은 리부팅을 해야 적용이 된다.

그리고 이름으로 잘 찾아지지 않을 때는 로컬에서는 이름대신 그냥 .(쩜)을 찍어주면 로컬에 깔려있는 SQL Server에 접근할 수 있다.

[Error Message]
 MYSQL ERROR : 1194 - Table 'tableName' is marked as crashed and should be repaired


[Command]
mysql> repair table tableName; //"tableName"는 오류가 생긴 테이블 입니다.
mysql>analyze table tableName;를 실행하면 테이블에 대한 보고서가 작성됩니다.
mysql>repair table tableName;를 실행하면 복원이 됩니다.


* 만약 repair 명령으로 복구가 안되면
myisamchk로 복구 처리할 것


-o, -r 옵션으로 복구 할 것
(Mysql서버 끄고 할 것)

SELECT * INTO 생성될 테이블명 FROM 원본 테이블 명

예)    SELECT * INTO target FROM source

단 ) 제약조건이나, Identity 정보는 복사되지 않는다.


MS-SQL 쿼리분석기에서 테이블구조만 복사

Select * into (만들고싶은 테이블) From (소스테이블) Where 0=1


MS-SQL 동일 테이블에서 특정 필드값만 변경해서 복사 하는 방법

INSERT INTO AA

(

    필드1, 필드2, 필드3, 필드4, 필드5

)

SELECT

    '2007', 필드2, 필드3, 필드4, 필드5

FROM AA

WHERE 필드1='2006'


서버에서 테이블 복사하는 법은?

간단하게

BACKUP DATABASE 디비명 TO DISK='경로' WITH INIT
restore database 디비명 from disk ='경로'


위의 두가지 방법으로 하셔도 되는데..

또 다른 방법이 있다면..

1. 테스트 서버에 접속한다.

select * from sysfiles 을 실행..
-> 물리적 파일 위치를 확인한다.

2. 테스트 서버의 기동을 정지시킨다.

3. 탐색기를 연후 1번에서 확인한 파일을 복사한다.(CTRL+C)

4. 원본 서버로 이동시킨다.(CTRL+V)

5. 원본 DB로 접속한다.
sp_attach_db [ @dbname = ] 'dbname' ,
[ @filename1 = ] 'filename_n' [ ,...16 ]
DB를 붙인다.

-> 예) 붙일 DB명이 pubs이고 파일이 아래와 같은때
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'

6. use @dbname (해당 DB로 이동한다)

7. 데이터를 확인한다.


* 경로가 틀리면 에러가 납니다. 또는 객체의 소유자가 의도 하지 않았던 것으로
바뀔수 있는데 이는 다시 수정하주면 됩니다.
* 설정하신 인덱스, 사용자, 사용자 정의 함수, 사용자 정의 SP까지 모두 옮겨지게
됩니다.


서버에 있는 테이블을 다른 서버로 옮길 수 있나요?

작업방법은 3 가지 정도가 있을 수 있습니다.

1. 데이터베이스 백업 / 복원

집에 있는 데이터베이스를 백업 받으셨다가 다른 컴퓨터에서 복원하는 방법입니다.

백업방법과 복원방법은 필요하시면 추가 질문 부탁합니다.

2. 데이터베이스 분리/연결

집에 있는 데이터베이스를 잠간 분리했다가 파일을 복사하여 사본을 만들고, 그 사본을 다른 서버로 옮긴다음, 해당 서버에서 다시 연결하면 됩니다.

분리 및 복원방법은 필요하시면 추가 질문 부탁합니다.

3. 데이터 가져오기 및 내보내기

집에 있는 데이터베이스와 옮기고자 하는 서버에 네트워크로 동시에 연결이 가능한 경우라면, 데이터 가져오기 및 내보내기 데이터 가져오기 및 내보내기 유틸리티를 사용하여 데이터와 스키마를 옮길 수 있습니다.

 mdf,ldf 파일을 직접 이동 하는 방법  (추천)

1) A 서버의 서비스를 내린다.

2) A 서버의 mdf, ldf 파일을 카피하여  B 서버로 이동 한다.

  -   디폴트로 SQL   서버를 설치하셨다면 C:\Program Files\Microsoft SQL Server\MSSQL\Data 에 파일가 있을 것임

3) B 서버에서 쿼리 분석기를 실행한다.

4) sp_attach_db 를 이용하여 mdf,ldf 파일을 B 서버에 첨부한다

예) pubs 데이터베이스를 첨부하는 예재

EXEC sp_attach_db @dbname = N'pubs'
   
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
,
   
@filename2 =
N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'  

sp_attach_db

서버에 데이터베이스를 첨부합니다.

구문

sp_attach_db [ @dbname = ] 'dbname' ,
   
[ @filename1 = ] 'filename_n' [ ,...16 ]

인수

[@dbname =] 'dbname'

서버에 첨부될 데이터베이스의 이름입니다. 이 이름은 고유해야 합니다. dbnamesysname이며 기본값은 NULL입니다.

[@filename1 =] 'filename_n'

데이터베이스 파일 경로를 포함한 물리적 이름입니다. filename_nnvarchar(260)이며 기본값은 NULL입니다. 16개까지 파일 이름을 지정할 수 있습니다. 매개 변수 이름은 @filename1에서 시작하여 @filename16까지 증가합니다. 파일 이름 목록은 데이터베이스의 다른 파일을 지정하는 시스템 테이블이 들어 있는 주 파일을 적어도 하나 이상 포함해야 합니다. 또한 목록은 데이터베이스가 분리된 다음 이동된 모든 파일을 포함해야 합니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

없음

비고

 명시적 sp_detach_db 작업을 사용하여 서버에서 이전에 분리된 데이터베이스만이 sp_attach_db를 사용할 수 있습니다.17개 이상의 파일을 지정해야 하는 경우에는 FOR ATTACH 절이 있는 CREATE DATABASE를 사용하십시오.

데이터베이스가 분리된 서버 외의 서버에 데이터베이스를 첨부한 경우 및 분리한 데이터베이스를 복제할 수 있는 경우, sp_removedbreplication을 실행하여 데이터베이스에서 복제본을 제거해야 합니다.

사용 권한

sysadmin 고정 서버 역할의 구성원만이 이 프로시저를 실행할 수 있습니다.

방법) SELECT * INTO 생성될 테이블명 FROM 복사할 테이블 명

예제) SELECT * INTO locker20091026bak FROM locker

단 ) 제약조건이나, Identity 정보는 복사되지 않는다.

+ Recent posts