그래서 직장에서 문제를 분석해보니 Oracle에서 일부 데이터 파일을 생성했을 때 해당 데이터 파일이 파일 시스템에서 공간을 예약하지 않아서 데이터 파일이 있는 파일 시스템으로 이동했는데 sapdata
놀랍게도 , ls -ltr
파일은 데이터 파일을 생성할 때 지정한 가중치로 표시되지만 a는 du -gs
0.00이라고 되어 있으므로 비교를 위해 다음 두 명령을 수행했습니다.
ㅏ)
find ./sapdata* -name "temp*" -type f -exec du -gs {} \;
둘)
find ./sapdata* -name "temp*" -type f -exec ls -ltr {} \; | awk '{printf ("%.2f\t%s\n", $5/1024/1024/1024,$9)}'
이 명령은 Linux가 아닌 Unix이기 때문에 이렇게 작동한다는 점을 명심하세요. -printf
or 를 사용할 수 없습니다 -h
. 사용해야 -g
하고 를 얻으려면 1024로 나누어야 합니다 ls
.
마지막 결과의 출력은 첫 번째 결과의 출력과 동일하지만 두 번째 결과는 의 정보를 사용합니다 ls -ltr
.
실제로는 모든 것이 괜찮습니다. 차이점을 확인했으며 이 문제를 해결하기 위해 노력하고 있지만 두 가지 방법으로 한 단계 더 발전하고 싶습니다.
- 두 결과를 혼합하고 어떤 파일이 연속적으로 다른지 알려주세요.
- 두 가지 결과를 혼합하여 모니터링 스크립트를 만드는 데 유용한 비교 "상태"를 얻습니다.
이 명령에서 얻은 출력의 예는 다음과 같습니다.
A) 나에게 :
15.63 ./sapdata19/temp_1/temp.data1
25.31 ./sapdata20/temp_2/temp.data2
B) 나에게 :
15.63 ./sapdata19/temp_1/temp.data1
0.00 ./sapdata20/temp_2/temp.data2
그래서 솔루션 1에서 나는 다음과 같은 것을 원합니다
DU DIFF LS
-------------------------------------------------------- ---------- --------------------------------------------------------
15.63 ./sapdata19/temp_1/temp.data1 OK 15.63 ./sapdata19/temp_1/temp.data1
25.31 ./sapdata20/temp_2/temp.data2 FAILED 0.00 ./sapdata20/temp_2/temp.data2
또는 그런 식으로 가능하다는 것을 알지만 헤더는 필요하지 않습니다.
솔루션 2의 경우 다음과 같은 것을 원합니다.
Health=50%
Number of Failed=1
Total Number of Datafiles=2
List of Failed=
./sapdata20/temp_2/temp.data2
어쩌면 BASH 스크립트를 사용하여 너무 많은 문제 없이 수행할 수 있는 마지막 솔루션일 수도 있지만 첫 번째 솔루션은 한 줄로 작성하고 싶기 때문에 어떻게 해야 할지 모르겠습니다. 나는 거기에 xargs
그리고 diff
아마도 아마도 거기에 있을 것이라고 생각 awk
하지만 확실하지 않습니다.
@roaima에게 답장하세요:
du
아니요, 이것은 과 사이의 차이점에 대한 질문이 아닙니다ls
. 차이점이 있다는 것을 알고 있지만 일반적으로 차이점은 의미가 없습니다. 이제 Oracle의 임시 파일의 경우 의미가 있을 수 있습니다. 저는 DBA가 아니기 때문에 Oracle이 어떻게 작동하는지 잘 모르겠지만brtools
.요점은 100G sapdata FS
/oracle/SID/sapdata1
(SAP 인스턴스용 oracle)가 있다고 가정한다는 것입니다. 25G의 데이터 파일 2개를 추가하면 이제 50G가 사용되고 50G가 사용sapdata1
가능해sapdata
지며 이제 각각 20G의 임시 파일 2개를 추가합니다. 따라서 sapdata1에는 90G의 사용 공간이 있지만 찾을 수 있는 각 파일의 합계로 표시되는 50G의 사용 공간을 가지게 되며du
임시 파일이 사용되지 않으면 남은 파일 크기는 1024K(빈) 파일 크기가 됩니다. "안녕하세요. 50G의 여유 공간이 있습니다. 메인 테이블스페이스에 2개의 25G 데이터 파일을 추가할 수 있습니다."라고 말하고df -Ph
이것을 추가합니다. 여기서 문제는 Oracle입니다. 실제로 테이블스페이스에 공간이 없다는 것을 이해하시겠습니까? 임시 파일의 가중치가 DF에 표시되지 않기 때문에 FS입니까? 내가 보기엔 그 사람은 모르고 당신이 그 두 개의 추가 데이터 파일을 추가하게 만들 것 같습니다.이때 FS에는 사용 가능한 0G 데이터 파일이 4개 있고, FS 공간을 차지하지 않는 20G 임시 파일이 2개 있습니다. a의 검색 결과를 추가하면
du
ls의 검색 결과를 추가하면 총 100G가 됩니다. , 총량은 100G가 되며 100G FS에서는 140G가 됩니다.이는 Oracle 데이터베이스가 실제로 이러한 임시 파일을 사용하려고 시도할 때 실행이 불가능하고 실패하거나 임시 파일의 크기를 남은 공간에 맞춰 자동으로 조정한다는 의미입니까? 확실하지는 않지만 제어하지 않으면 실패할 것이며 프로덕션 환경에서 실패하는 것은 좋지 않습니다.
Oracle은 이러한 임시 파일을 신속하게 생성하기 위해 공간을 할당하지 않고 생성하지만 제 생각에는 이는 단순한 혼란보다는 몇 가지 문제를 일으킬 수 있습니다. 내 영어 실력이 최고가 아니라면 죄송합니다.
@Paul_pedant 죄송합니다. 이것이 Linux가 아니라 Unix라는 점을 지적하는 것을 잊었습니다. unix find는 아직 존재하지 않습니다
-print
. 어쨌든 find를-printf
사용하여 이것을 단축할 수 있지만-print
저는 그것을 사용하고 싶습니다awk
. 하하.