답변:
창을 재부팅 할 때마다 일부 데이터베이스의 경우이 오류가 발생합니다. (OS 오류 21-장치 준비 안 됨)
디스크가 오프라인 상태이거나 SQL Server가 시작될 때 온라인 상태가 아니거나 SQL Server가 온라인 상태가 된 후 상태가 전환 되었기 때문입니다.
3. SQL Server를 다시 시작하면 오류가 사라집니다.
예. 데이터베이스가 SQL Server 내부에 다시 마운트 되었기 때문입니다. 디스크 장치가 수정되었다고 가정하면 데이터베이스를 오프라인-> 온라인 상태로 전환 할 수도 있습니다.
디스크에 데이터베이스를 배치하고 디스크를 비활성화하고 선택 쿼리를 실행하여 (오류가 발생 함) 디스크를 다시 온라인 상태로 만들고 선택이 여전히 동일한 오류로 실패 함을 알면 테스트 환경에서 쉽게 재현 할 수 있습니다. 다시 작동하고 OS 오류 21이 발생하지 않도록하려면 데이터베이스를 다시 마운트해야합니다.
어떻게해야합니까?
누군가 처음에 온라인으로 연결되지 않는 이유 또는 오프라인 상태가되는 이유 (상태 전환) 또는 왜 Windows에 준비가되었지만 실제로 표시되지 않는지 (다른 드라이버를로드해야 할 수 있음) 그것).
또한 서비스 / 시작 / 상태를 차단할 수 있으므로 안티 바이러스, 호스트 침입 방지 등과 같은 디스크 필터 드라이버가 최신인지 확인하십시오.
원인을 찾은 것 같습니다.
대부분의 문제는 "빠른 시작"전원 옵션 으로 인한 것 입니다.
부팅 시간을 줄이는 Windows 기술입니다. 빠른 시작은 콜드 셧다운 요소 와 최대 절전 모드 기능을 결합 합니다 .
여기에서 장단점에 대한 다른 기사 를 찾을 수 있습니다
사용 중지했으며 문제가 해결 된 것 같습니다.
이것들은 저의 관찰 사항이며 어떻게 문제를 해결했는지 (동일한 문제가있는 다른 사람들의 이익을 위해)
MSSMS를 통해 로컬 기본 MS SQL 인스턴스 (2017)에 연결할 때 발생하는 전체 오류는 다음과 같습니다.
파일 'D : \ MSSQL \ DATA \ tempdev.mdf'에서 오프셋 0x000000000ae000을 읽는 동안 운영 체제에서 오류 21 (장치가 준비되지 않았습니다.)을 SQL Server에 반환했습니다. SQL Server 오류 로그 및 운영 체제 오류 로그의 추가 메시지가 더 자세한 정보를 제공 할 수 있습니다. 이는 데이터베이스 무결성을 위협하는 심각한 시스템 수준 오류 조건이므로 즉시 수정해야합니다. 전체 데이터베이스 일관성 검사 (DBCC CHECKDB)를 완료하십시오. 이 오류는 여러 가지 요인으로 인해 발생할 수 있습니다. 자세한 내용은 SQL Server 온라인 설명서를 참조하십시오. (Microsoft SQL Server, 오류 : 823) 도움말을 보려면 다음을 클릭하십시오. http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476
tempdb를 새 D 드라이브로 옮긴 후에 이것을 얻기 시작했습니다. SQL 서비스를 시작 / 중지하면 오류가 제거됩니다. 모든 것이 C에있을 때이 오류가 발생하지 않았습니다. 두 드라이브 모두 SSD이며 Bitlocker로 암호화되어 있습니다. 문제가 될 수 있는지 확실하지 않습니다. 운영 체제가 필요로하기 때문에 C 드라이브가 매우 일찍 잠금 해제되고 나중에 D 드라이브가 잠금 해제됩니다 .
나는 같은 문제를 여러 번 겪었고 해결책을 공유해야한다고 생각했습니다 (이미 제공된 답변에도 불구하고).
그래서 두 개의 SQL 인스턴스 (SQL 2008 및 SQL 2017)가 있습니다. 오류가 SQL08 인스턴스가 아니라 SQl17에 나타납니다. 이는 각 SQL 인스턴스의 설치 / 설정 중에 제공된 "계정 자격 증명"으로 인해 발생합니다.
이것은 Windows 서비스에서 볼 수 있습니다. SQL08은 "로컬 시스템 계정"을 사용하도록 설정되었으며 실패한 SQL17은 "NETWORK ACCOUNT"로 설정되었습니다. 따라서 변경하고 여기에서 SQL 서비스를 다시 시작하십시오 (또는 SQL 브라우저에서 인스턴스를 다시 시작하십시오).
이 문제의 두 번째 부분은 SQL Server Management Studio V17을 사용할 때 SQL Server 2017 CTP 2.0에 고유합니다.이 경우 SMO는 로컬 디스크의 여유 공간 정보를 얻기 위해 이전 " xp_fixeddrives " 대신 " sys.dm_os_enumerate_fixed_drives " 를 사용하도록 전환했습니다. . 이 문제를 해결하려면 장치 관리자로 이동하여 인용 된 드라이브를 일시적으로 비활성화하십시오 (제 경우에는 DVD-ROM 드라이브 인 "G"드라이브였습니다).
이 문제는 나를 자극했다. SQL Server 인스턴스에 5 개의 DB가 연결되어 있는데 그 중 3 개는 정상적으로 작동하지만 2 개는 불평합니다.
파일 'E : \ xxxxxxxx.mdf'의 오프셋 0x00000000204000에서 읽는 동안 운영 체제에서 오류 21 (장치가 준비되지 않았습니다.)을 SQL Server에 반환했습니다.
여기 내 해결책이 있습니다.
참고로, DB 오프라인 / 온라인 방법을 사용하려고했습니다. 내 경우에는 작동하지 않았습니다. sqlserver 서비스를 다시 시작하는 무차별 대입은 훌륭하게 작동했습니다. 이것은 모든 DB를 오프라인으로 전환하려는 지분이 너무 높은 사람들에게는 문제가 될 수 있습니다. 그러나 나처럼 로컬 개발을하고 있다면이 솔루션이 좋을 것입니다.