因此,分析工作中的一个问题,我发现,当我在 Oracle 上创建一些数据文件时,数据文件没有在文件系统中保留空间,因此我转到sapdata
放置数据文件的文件系统,令我惊讶的是,ls -ltr
显示了文件我创建数据文件时指定的权重,但 adu -gs
说它是 0.00 所以为了比较我做了这两个命令:
A)
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)}'
请记住,这个命令是这样的,因为这是 Unix,而不是 Linux,我不能使用-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
anddiff
或者可能是 forawk
但我不确定。
回答@roaima:
不,这不是关于
du
和之间差异的问题ls
,我知道存在差异,但通常这种差异没有意义,现在对于 Oracle 上的临时文件来说,它可能是有意义的。我不完全确定 Oracle 是如何工作的,因为我不是 DBA,但我必须执行一些简单的任务,例如从brtools
.要点是,假设您有一个 100G 的 sapdata FS
/oracle/SID/sapdata1
(SAP 实例的 oracle)。如果您添加 2 个 25G 的数据文件,现在sapdata1
将sapdata
有 50G 使用,50G 可用,现在您添加 2 个每个 20G 的临时文件。因此,您在 sapdata1 上将有 90G 已用空间,但是不会,您将有 50G 已用空间,由您通过 找到的每个文件的总和表示du
,然后您改天,如果未使用临时文件,它们将保持为 1024K(空)文件大小),然后你df -Ph
说“嘿,我有 50G 可用空间,我可以在我的主表空间上添加 2 个 25G 数据文件”,你去添加这一点,这里的问题是,Oracle 是否会理解实际上没有空间在 FS 上,因为临时文件的权重未在 DF 上表示?在我看来,他不会知道,并且会让您添加这两个额外的数据文件。此时,FS 上将有 4 个 0G 可用的数据文件,加上 2 个不占用 FS 空间的 20G 临时文件,如果将 a 的查找结果相加,则总和
du
将为 100G,如果将 ls 的查找结果相加,则将在 100G FS 上为 140G。这意味着当 Oracle 数据库尝试实际使用这些临时文件时,它将无法执行并失败,或者它会自动将临时文件的大小调整为剩余空间?我不确定,但如果没有控制,它就会失败,并且在生产环境中失败并不是很好。
Oracle 创建这些临时文件时没有分配空间来快速创建它们,但在我看来,这可能会导致一些问题,而不仅仅是混乱。抱歉,如果我的英语不是最好的。
@Paul_pedant抱歉,我忘了指出这是Unix,而不是Linux,unix find 还没有
-print
,-printf
无论如何我都可以用-print
on find 来缩短这个时间,但我喜欢使用awk
呵呵。