DBA로서 Oracle에서 SQL Server로 전환하는 방법은 무엇입니까?


답변:


49

지난 몇 년 동안 Oracle과 SQL Server 작업을 바꿨으며 다른 방법으로 글을 쓰지 않았습니다 . 많은 관용적 및 구조적 차이점이 있으며 각 제품을 둘러싼 공급 업체 및 개발자 / DBA 커뮤니티에 따라 다양한 용어가 다르게 사용됩니다.

물리적 아키텍처

SQL Server는 다양한 것을 Oracle과 다르게 구성하며 Oracle에는 직접적인 아날로그가없는 하나 또는 두 가지 주요 개념이 있습니다.

  • '데이터베이스'는 자체 사용자 권한, 스키마 / 네임 스페이스 및 스토리지가있는 SQL Server의 별도 항목입니다. Sybase에 익숙한 경우 제품의 공통된 기원으로 인해 Sybase의 데이터베이스와 거의 동일하게 작동합니다.

  • 파일 그룹은 데이터베이스에 로컬이지만 테이블 스페이스와 거의 같습니다.

  • 스키마는 SQL Server의 데이터베이스 사용자와 다른 개념이지만 사용자는 기본 스키마를 가질 수 있습니다.

  • MVCC는 SQL Server에서 약간 다르게 작동합니다. 이전 버전의 잠금이 해제 될 때까지 행의 다른 사본을 유지 보수하는 비교적 최신 기능입니다. SQL Server에는 롤백 세그먼트와 직접적인 관련이 없습니다. SQL Server 데이터베이스에서는 기본적으로 활성화되어 있지 않습니다.

  • Tempdb는 SQL Server에서 훨씬 더 많이 사용됩니다. 시스템은 임시 테이블 및 중간 조인 결과에이를 사용합니다. 나중에 tempdb에 대한 추가 정보.

  • 테이블 파티셔닝은 Oracle보다 다소 어색합니다. 제공하는 모든 것에서 파티션 키를 생성 한 다음 해당 파티션 기능에 대한 파티션 구성표를 생성하는 파티션 기능을 설정해야합니다. 파티션 구성표는 파티션 구성표에 테이블을 생성한다는 점에서 파일 그룹과 비슷하게 동작합니다.

    파티션을 스왑 및 스왑하려면 올바른 구조의 빈 테이블에 대한 제약 조건을 설정해야합니다. 제약 조건은 파티션 키 값이 스왑하려는 파티션에 적합하다는 것을 보장합니다.

  • 구체화 된 뷰를 SQL Server에서 인덱싱 된 뷰라고합니다. 이 GROUP BY절에는 CUBE연산자 가 있으며 설명서에는 쿼리 다시 쓰기 기능이 있습니다. 그러나이 기능은 잘 문서화되어 있지 않으며 완전히 성숙하지 않을 수 있습니다. YMMV.

  • SQL Server는 XA 또는 OLEDB 트랜잭션 프로토콜을 통한 2 단계 커밋을 지원하지만 자율 트랜잭션을 지원하지 않습니다.

  • 클러스터형 인덱스는 테이블의 모든 열이 클러스터형 인덱스에 참여할 필요가 없기 때문에 Oracle의 인덱스 순서 테이블과 약간 다릅니다. IOT가 Oracle에있는 것보다 SQL Server 아키텍처에서 훨씬 더 널리 사용됩니다.

  • SQL Server는 인덱스 커버링을 지원하지만 조인 인덱스는 없습니다. 비트 맵 인덱스는 팩트 테이블에 충돌하지 않고 교차점을 계산할 수있는 인덱스 교차점 / 별 변환 연산자가 있지만 지원되지 않습니다.

  • 시퀀스는 SQL Server에 비교적 최근에 추가 된 것입니다. 전통적으로 자동 증가 키는 ID 열을 통해 수행됩니다. 를 통해 ID 열에 값을로드 할 수 있습니다 set identity_insert on.

프로그램 작성

관용 T-SQL은 관용 PL / SQL과 약간의 차이가 있습니다. 패러다임의 차이점 중 일부가 더 깊이 설명 할만큼 충분히 다르게 작동합니다.

  • T-SQL에는 패키지 개념이 없습니다. 데이터베이스의 모든 저장 프로 시저와 함수는 공통 네임 스페이스에 존재하지만 스키마를 사용하여이를 분리 할 수 ​​있으며 네임 스페이스는 데이터베이스에 로컬입니다.

  • 임시 테이블 사용법에 대해 알아보십시오 SELECT INTO. 실제로 커서가 필요한 T-SQL 코드를 만나는 경우는 매우 드;니다. 임시 테이블을 사용하면 작업을 설정된 작업으로 수행 할 수있는 단계로 나눌 수 있습니다. SELECT INTOtempdb의 로그는 최소한으로 기록되며 사용자 데이터베이스의 특정 복구 모드에서도 최소한으로 기록되므로 중간 조인 결과를 유지하는 쿼리 연산자만큼 빠릅니다.

    관용적 인 T-SQL은 PL / SQL에서 커서 변수를 볼 수있는 일종의 역할로 임시 테이블을 사용하지만 집합 연산을 훨씬 더 많이 사용합니다. 그러나 임시 테이블은 상당히 불분명 한 코드를 만들 수 있으므로주의해서 사용하십시오.

  • 시스템 데이터 딕셔너리는 이전 버전의 오라클보다 훨씬 더 불분명하지만 SQL Server 2005에서는 훨씬 나아졌습니다. Microsoft에서 제공하는 도구에는 SSMS 탐색기에 내장 된 많은 내성 항목이 있지만 여전히 데이터 사전 주위에. 그것은 구분하지 않는 ALL, USER그리고 DBA불구하고, DB 객체의 전망을 제공합니다.

  • SSMS에는 쿼리 계획 뷰어가 내장되어 있습니다.

  • T-SQL 코드의 식별자는 []로 인용 할 수 있으며 인용 된 경우 모든 종류의 쓰레기를 포함 할 수 있습니다. 우리는 열 '직항 / 전송'을 호출 당신을 잡을 경우, 우리는 것입니다 당신의 장을 찢어.

  • SQL Server에는 창 기능 (2005 IIRC부터)이 있으므로 이제 그룹 내에서 주문, 합계 실행 등을 수행 할 수 있습니다.

  • CONNECT BY재귀는 재귀 적 CTE를 통해 수행 될 수 있지만 T-SQL 은와 직접적으로 동일하지 않습니다 .

  • 데이터베이스 내 스키마와 달리 데이터베이스에서 홉하는 코드를 작성해야하는 경우 공용 동의어를 사용하여 오브젝트를 로컬로 별명을 지정하고 코드의 별명을 참조하십시오. 이렇게하면 데이터베이스 이름에 대한 하드 코딩 된 종속성이 방지됩니다.

  • 데이터베이스 이름에 대한 하드 코딩 된 종속성을 피하면 데이터베이스를 통해 동일한 서버에서 여러 환경을 유지 관리하기가 매우 쉽습니다.

  • 사용자 지정 집계 함수와 같은 일부는 CLR sprocs를 통해서만 구현할 수 있습니다. 또한 트랜잭션 컨텍스트에서 벗어나려면 (예 : 롤백 방지 오류 로깅을 위해 자율 트랜잭션을 가짜로 만들기 위해) 현재 트랜잭션 컨텍스트 외부에서 로컬 연결을 만들 수 있으므로 CLR 프로 시저를 사용할 수 있습니다.

보안

로그인은 SQL Server 인스턴스 수준에서 정의되지만 각 로그인은 '데이터베이스 사용자'로서 0 개 이상의 데이터베이스에 매핑됩니다. 권한 캠은 '로그인'(서버) 및 '사용자'(데이터베이스) 모두에 할당되지만 데이터베이스 '역할'에는 일반적으로 사용됩니다. 사용자는 역할에 속하고 권한은 역할에 할당됩니다. SQL Server 2012에는 '서버 역할'이 추가되었습니다.

  • SQL Server 2012에는 '부분적으로 포함 된 데이터베이스'라는 개념이 도입되어 사용자 및 역할 정보를 해당 데이터베이스에 로컬로 유지할 수 있습니다.

  • 데이터베이스 내에서 사용자와 스키마의 개념은 분리되어 있습니다. 사용자 또는 역할을 스키마에 할당 할 수 있으며 스키마는 데이터베이스 객체를 소유합니다.

  • Windows 인증은 배후의 로그인 정보를 사용하여 컴퓨터 또는 도메인의 사용자를 SQL Server 로그인으로 인증합니다. 이에 대한 IIRC 지원은 Oracle의 추가 옵션입니다.

  • 특별한 역할 인 'dbo'( '데이터베이스 소유자'의 약자)는 특정 데이터베이스 내에서 일종의 수퍼 유저 권한을 갖습니다. 각 데이터베이스에는 'dbo'역할이 있으며 지정된 데이터베이스에서 'dbo'역할에 사용자를 지정할 수 있습니다.

  • 기본 'dbo'스키마도 있습니다. dbo 스키마가 개체를 소유 할 수 있음-다른 스키마가 명시 적으로 제공되지 않는 한 'dbo'역할 (또는 시스템 전체 관리자 권한)을 가진 사용자가 만든 개체는 기본적으로 'dbo'스키마가 소유합니다.

  • 단일 데이터베이스의 백업으로 보안 정보가 유지되지 않습니다. 백업이 복원되는 서버에서 사용자와 역할을 명시 적으로 구성해야합니다. SQL Server 2012에서는 새로운 '부분적으로 포함 된 데이터베이스'기능을 통해 사용자 및 역할 데이터를 데이터베이스에 로컬로 유지할 수 있습니다.

  • SQL Server 2005부터는 호출자, 작성자, 소유 스키마 또는 지정된 사용자의 보안 컨텍스트에서 저장 프로 시저를 실행할 수 있습니다.

  • SQL Server의 뷰에서 기본 테이블에 대한 권한은 뷰를 소유 한 스키마의 권한을 기반으로합니다. 뷰 정의에는 세션에서 정보를 가져 오는 필터가 포함될 수 있지만 기본 테이블에 대한 사용자 권한은 보안에 참여하지 않습니다. Oracle에서, 권한 부여 구성에 따라 기본 테이블에 대한 사용자 권한이보기에 영향을 줄 수 있습니다.

모니터링 및 튜닝

TBA-오라클의 메모리 아키텍처와 SGA 등

백업 및 복구

TBA

압형

Microsoft는 SQL Server에 일련의 주변 도구를 번들로 제공합니다. 공급되는 주요 품목 중 일부는 다음과 같습니다.

  • SSMS (SQL Server Management Studio) : Oracle의 SQL Developer와 유사한 기능을 수행하며 편집기 및 코드 실행 기능을 제공합니다. 유용한 기능으로는 데이터베이스 개체 브라우저 및 쿼리 계획 뷰어가 있습니다.

  • SSAS (SQL Server Analysis Services) : 데이터베이스 서버와 다른 OLAP 서버입니다. 클라이언트-서버 통신을 위해 자체 쿼리 언어 (MDX) 및 API (XML / A)를 사용합니다. SQL로 쿼리 할 수 ​​없습니다. SSMS에는 MDX 및 원시 XMLA 쿼리를 편집하고 결과를 표시하는 기능이 있습니다. ASCMD.EXE라는 명령 줄 쿼리 도구도 제공됩니다.

  • SSRS (SQL Server Reporting Services) : 보고서를 게시하기위한 웹 기반보고 도구입니다. BI Development Studio (BIDS) 또는 Report Builder를 통해 보고서를 작성하고 웹 포털에 게시 할 수 있습니다. SSRS 서버 자체에는 프로그래밍 방식으로 서버를 관리하기위한 웹 서비스 API가 있습니다. SSRS 보고서는 SQL Server뿐만 아니라 다양한 소스의 데이터를 사용할 수 있습니다. SSRS 서버를 프로그래밍 방식으로 관리하기 위해 RS.EXE라는 명령 줄 도구가 제공됩니다.

  • SSIS (SQL Server Integration Services) : SQL Server와 함께 제공되는 ETL 도구입니다. 구조적으로는 코드 생성 도구가 아니라는 점에서 OWB 또는 ODI와는 상당히 다릅니다. 런타임은 클라이언트 측에 있으며 데이터베이스 서버와 별도의 시스템에있을 수 있습니다. SSIS 패키지는 BIDS로 개발할 수 있으며 DTEXEC.EXE라는 명령 줄 도구를 사용하여 독립적으로 실행할 수 있습니다.

  • BIDS (BI Development Studio) : 보고서, SSIS 패키지 및 SSAS 큐브를 개발하기위한 비주얼 스튜디오 기반 환경입니다. 다른 VS 기반 개발 툴링 (예 : VS Professional)이 설치된 경우 툴링을 단일 환경 및 공통 프로젝트 그룹으로 통합 할 수 있습니다.

  • 대량 복사 (BCP) : SQL * Loader와 유사한 명령 줄 대량 삽입 / 추출 도구

  • SQLCMD : SQL * plus와 유사한 명령 줄 쿼리 도구

  • SQL 프로파일 러 : SQL Server, SSAS 및 제품군의 다른 도구에서 추적 정보를 캡처하고 평가할 수있는 추적 및 프로파일 링 도구입니다.

  • SQL Server 에이전트 : 한 종류의 다른 종류의주기적인 작업을 실행할 수있는 작업 스케줄링 유틸리티.


1
T-SQL과 PL / SQL의 경우 : T-SQL에는 PL / SQL과 같은 다른 프로그래밍 컨텍스트가 없으므로 순수 SQL과 T-SQL 문을 자유롭게 혼합 할 수 있습니다. 예를 들어에 해당하는 작업을 수행하지 않고도TRUNCATE TABLE ... DML과 함께 실행할 수 있습니다 . T-SQL에서는 다른 작업과 함께 사용하여 결과 집합을 클라이언트에 반환 할 수도 있지만 PL / SQL 에서는의 출력을 테이블 또는 다른 대상으로 보내야 합니다. Oracle에서는 순수 SQL 만 결과 세트를 클라이언트에 리턴 할 수 있습니다. EXECUTE IMMEDIATESELECTSELECT
Nick Chammas

1
또한 이름이 "sp_"로 시작하는 저장 프로시 저는 특별히 처리됩니다. 최신 버전의 SQL Server에서 시스템 프로 시저를 백 포트하지 않는 한 저장된 procude의 이름을 지정하지 마십시오. 기술적으로이를 활용하여 데이터베이스 전체 저장 프로 시저를 만들 수 있지만 이후 버전에서는 동일한 이름의 새 시스템 저장 프로 시저를 만들 수 있으므로 권장되지 않습니다.
Kevin Cathcart

1
여기에 잠금 에스컬레이션에 대해 조금 추가 할 가치가 있습니까? 오라클 사람들이 무제한 행 레벨 잠금에
Jack Douglas

8

우리의 주요 제품은 SQL Server와 Oracle 모두에서 작동합니다. 여기에 해결해야 할 다른 차이점이 있으며 명심해야 할 수도 있습니다.

  • 날짜-시간 처리는 매우 다릅니다 : 다른 정밀도, 다른 함수와 함께 작동

  • 빈 문자열은 SQL Server가 아닌 Oracle에서 NULL입니다.

  • 문자 인코딩과 유니 코드 처리는 매우 다릅니다. SQL Server에서는 동일한 데이터베이스에 일반 ( varchar) 또는 유니 코드 ( nvarchar) 열을 혼합하여 사용할 수 있으며 Oracle에서는 데이터베이스 수준에서 사용할 인코딩 종류를 결정합니다.


또한 Oracle은 char / varchar2 및 nchar / nvarchar2 유형을 두 가지 인코딩으로 혼합 할 수 있습니다. 유니 코드 문자는 두 가지 방법으로 Oracle 데이터베이스에 저장 될 수 있습니다 .
George3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.