本文包含大多数 DBA 经常需要的命令的简要列表
基本文件、路径命令
pwd
命令显示当前目录。
root> pwd
/u01/app/oracle/product/9.2.0.1.0
ls
命令列出指定目录中的所有文件和目录。如果未定义位置,则作用于当前目录。
root> ls
root> ls /u01
root> ls -al
“-a” 标志列出隐藏的 “.” 文件。“-l”标志列出文件详细信息。
“cd”命令用于更改目录。
root> cd /u01/app/oracle
“touch”命令用于创建具有默认权限的新空文件。
root> touch my.log
“rm”命令用于删除文件和目录。
root> rm my.log
root> rm -R /archive
“-R”标志指示命令通过子目录递归。mv
命令用于移动或重命名文件和目录。
root> mv [from] [to]
root> mv my.log my1.log
root> mv * /archive
root> mv /archive/* .
“.”表示当前目录。cp
命令用于复制文件和目录。
root> cp [from] [to]
root> cp my.log my1.log
root> cp * /archive
root> cp /archive/* .
mkdir
命令用于创建新目录。
root> mkdir archive
rmdir
命令用于删除目录。
root> rmdir archive
find
命令可用于查找特定文件的位置。
root> find / -name dbmspool.sql
root> find / -print | grep -i dbmspool.sql
root> find / -name "log_*.xml" -mtime +7
“+mtime” 表示 过滤 指定日期前有改动的文件
“/”标志表示搜索的凝视目录。通配符(如“dbms*”)可用于文件名。which
命令可用于查找您正在使用的可执行文件的位置。
oracle> which sqlplus
“which”命令在 PATH 设置中搜索指定可执行文件的出现。
文件权限
请参阅 Linux 文件、目录和权限。
“umask
”命令可用于读取或设置当前用户的默认文件权限。
root> umask 022
从默认权限 (666) 中减去掩码值以提供最终权限。
666 : Default permission
022 : - umask value
644 : final permission
chmod
命令用于在创建文件后更改文件权限。
root> chmod 777 *.log
Owner Group World Permission
========= ========= ========= ======================
7 (u+rwx) 7 (g+rwx) 7 (o+rwx) read + write + execute
6 (u+rw) 6 (g+rw) 6 (o+rw) read + write
5 (u+rx) 5 (g+rx) 5 (o+rx) read + execute
4 (u+r) 4 (g+r) 4 (o+r) read only
2 (u+w) 2 (g+w) 2 (o+w) write only
1 (u+x) 1 (g+x) 1 (o+x) execute only
字符等价可以在 chmod 命令中使用。
root> chmod o+rwx *.log
root> chmod g+r *.log
root> chmod -Rx *.log
chown
命令用于在创建后重置文件的所有权。
root> chown -R oinstall.dba *
“-R”标志会导致命令子目录递归。
操作系统用户管理
请参阅 Linux 组和用户。useradd
命令用于添加操作系统用户。
root> useradd -G oinstall -g dba -d /usr/users/my_user -m -s /bin/ksh my_user
- “-G”标志指定主组。
- “-g”标志指定辅助组。
- “-d”标志指定默认目录。
- “-m”标志创建默认目录。
- “-s”标志指定默认 shell。
usermod
命令用于在创建用户后修改用户设置。
root> usermod -s /bin/csh my_user
userdel
命令用于删除现有用户。
root> userdel -r my_user
“-r”标志将删除默认目录。passwd
命令用于设置或重置用户登录密码。
root> passwd my_user
who
命令可用于列出具有操作系统连接的所有用户。
root> who
root> who | head -5
root> who | tail -5
root> who | grep -i ora
root> who | wc -l
- “head -5”命令将输出限制为 who 命令的前 5 行。
- “tail -5” 命令将输出限制为 who 命令的最后 5 行。
- “grep -i ora”命令将输出限制为包含“ora”的行。
- “wc -l” 命令返回来自 “who” 的行数,从而返回连接的用户数。
流程管理
请参阅 Linux 进程管理(ps、top、renice、kill)。ps
命令列出当前进程信息。
# ps
# ps -ef | grep -i ora
# ps -ef | grep -i ora | grep -v grep
# ps -ef | grep -i [o]ra
可以通过在 kill 命令中指定进程 ID 来终止特定进程。
# kill 12345
# kill -9 12345
通过将“kill”与“ps”和“awk”命令组合在一起,可以使用单个命令终止多个进程。
# kill -9 ps -ef | grep ora | awk '{print $2}'
uname 和主机名
uname
和hostname
命令可用于获取有关主机的信息。
root> uname -a
OSF1 oradb01.lynx.co.uk V5.1 2650 alpha
root> uname -a | awk '{ print $2 }'
oradb01.lynx.co.uk
root> hostname
oradb01.lynx.co.uk
过滤告警ORA-
您可以使用以下方式返回文件中的错误行。
root> cat alert_LIN1.log | grep -i ORA-
“grep -i ORA-”命令将输出限制为包含“ORA-”的行。“-i”标志使比较大小写不敏感。 可以使用“wc”命令返回错误行的计数。这通常会给出一个字数统计,但“-l”标志会改变它 给出行数。
root> cat alert_LIN1.log | grep -i ORA- | wc -l
删除旧文件
find``rm
该命令可用于向命令提供文件列表,也可以直接使用“-delete
”命令。
--删除21天前
find /backup/logs/ -name daily_backup* -mtime +21 -exec rm -f {} ;
--删除5天前
find /backup/logs/daily_backup* -mtime +5 -exec rm -f {} \;
find /backup/logs/daily_backup* -mtime +5 -delete;
文件是否存在检查
Bash shell 允许您使用“[ -e 文件路径]”比较来检查文件是否存在。在以下脚本中,a 如果备份日志存在,则重命名备份日志,并删除超过 30 天的文件。
#!/bin/bash
if [ -e /tmp/backup.log ]; then
DATE_SUFFIX=`date +"%Y"-"%m"-"%d"`
mv /tmp/backup.log /tmp/backup-$DATE_SUFFIX.log
fi
# Delete old log files.
find /tmp/backup*.log -mtime +30 -delete;
这是日志轮换的一个示例,其中最新日志的名称中不包含日期。
轮换日志文件
请参阅上一节,了解日志轮换的另一个变体。
以下脚本提供了如何使用 Bash shell 管理日志轮换的示例。日志文件在文件名中包含日期。超过 30 天的文件将被删除。
#!/bin/bash
DATE_SUFFIX=`date +"%Y"-"%m"-"%d"`
LOG_FILE=/tmp/backup-$DATE_SUFFIX.log
# Do something that needs logging.
echo "Send this to log" >> $LOG_FILE 2>&1
# Delete old log files.
find /tmp/backup*.log -mtime +30 -delete;
查找大文件
从此目录中以递归方式查找前 20 个最大的文件。
$ find . -type f -print0 | xargs -0 du -h | sort -hr | head -20
对目录中的每个文件执行操作
以下脚本显示了对目录中的每个文件执行操作的两种方法。
#!/bin/bash
for FILE in `ls /tmp/`; do
# Do something with the file name.
echo $FILE;
done
# Or this.
for FILE in $( ls /tmp/ ); do
echo $FILE
done
对文件中的每一行执行操作
以下脚本显示了对文件中的每一行执行操作的方法。
#!/bin/bash
while read LINE; do
# Do something with the line.
echo $LINE;
done < /tmp/myfile.txt
别名
别名是使用以下格式的较长命令的命名快捷方式。
alias name='command'
例如,如果需要对特定命令进行 sudo 访问,则可能需要将其作为别名包含在内,这样就不必记住键入它。
alias myscript='sudo -u oracle /path/to/myscript'
删除 DOS CR/LF (^M)
从 UNIX 文件中删除 DOS 样式的 CR/LF 字符 (^M)。
sed -e 's/^M$//' filename > tempfile
新创建的临时文件应删除 ^M 字符。
如果可用,最好使用 dos2unix
和 unix2dos
命令。
从 root 以 Oracle 用户身份运行命令
以下脚本显示了如何以“oracle”用户和“root”用户的身份运行许多命令。
#!/bin/ksh
su - oracle <<EOF
ORACLE_SID=LIN1; export ORACLE_SID
rman catalog=rman/rman@w2k1 target=/ cmdfile=my_cmdfile log=my_logfile append
EOF
当 CRON 作业从 root 用户而不是 oracle 用户运行时,这通常是必要的。
压缩文件
请参阅 Linux 存档工具(tar、star、gzip、bzip2、zip、cpio)。
为了节省文件系统上的空间,您可能希望压缩文件,例如存档的重做日志。这可以使用gzip
或compress
命令。gzip
该命令将生成原始副本的压缩副本 扩展名为“.gz”的文件。gunzip
该命令将反转此过程。
gzip myfile
gunzip myfile.gz
compress
该命令将生成带有“.Z“扩展名。uncompress
该命令将反转此过程。
compress myfile
uncompress myfile
一般性能
vmstat
报告虚拟内存统计信息。
# vmstat 5 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1060608 24372 739080 0 0 1334 63 1018 1571 14 11 66 10 0
0 0 0 995244 24392 799656 0 0 6302 160 1221 1962 10 10 62 18 0
0 0 0 992376 24400 799784 0 0 1 28 992 1886 3 2 95 0 0
#
请参见 vmstat 手册页。
free
报告当前内存使用情况。“-/+ buffers/cache:” 行表示真正已用和可用内存,忽略 Linux 文件系统缓存。
# free
total used free shared buffers cached
Mem: 8178884 4669760 3509124 0 324056 1717756
-/+ buffers/cache: 2627948 5550936
Swap: 10289148 0 10289148
#
IOSTAT的
报告 I/O 统计信息。
# iostat
Linux 3.2.10-3.fc16.x86_64 (maggie.localdomain) 03/19/2012 _x86_64_(4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.02 0.23 0.51 0.78 0.00 96.46
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 9.23 100.55 62.99 1796672 1125538
dm-0 13.60 100.31 62.99 1792386 1125524
dm-1 0.02 0.08 0.00 1432 0
#
CPU 使用率
请参阅 Linux 进程管理(ps、top、renice、kill)。
特区
在 Linux 系统上,sar(系统活动报告器)可能是报告系统利用率(包括 CPU、内存、磁盘和网络活动)的最简单、最通用的工具之一。使用以下命令安装时,它会自动收集系统活动统计信息。
# yum install sysstat
命令语法采用以下形式。sar
# sar [options] [interval [count]]
“options”参数决定了报告的内容,稍后将讨论。“interval”参数表示样本之间的时间间隔(以秒为单位)。“count”参数指示在命令结束之前将要采集的样本数。如果省略“计数”,则采样将无限期地继续进行。如果同时省略“interval”和“count”,则该命令将报告自上次重新启动计算机以来所采集的 10 分钟样本的值。
如 sar 手册页所示,有很多可用的选项,但您可能会发现一些有趣的起点包括:
-
中央处理器:
- 基本 CPU:sar [-u] [interval [count]]
- 平均负载: sar -q [interval [count]]
-
记忆:
- 内核分页:sar -B [interval [count]]
- 未使用的内存:sar -r [interval [count]]
- 交换空间:sar -S [interval [count]]
-
磁盘:
- 平均磁盘 I/O:sar -b [间隔 [计数]]
- 磁盘 I/O:sar -dp [interval [count]]
-
网络:
- 网络:sar -n DEV [interval [count]]
- 网络错误:sar -n EDEV [interval [count]]
下面是 CPU 报告的输出示例。
# sar -u 1 5
Linux 2.6.32-100.0.19.el5 (ol5-112.localdomain) 06/27/2011
03:10:07 PM CPU %user %nice %system %iowait %steal %idle
03:10:08 PM all 0.00 1.01 23.23 75.76 0.00 0.00
03:10:09 PM all 0.00 1.02 35.71 63.27 0.00 0.00
03:10:10 PM all 0.98 3.92 35.29 59.80 0.00 0.00
03:10:11 PM all 0.00 1.03 29.90 69.07 0.00 0.00
03:10:12 PM all 0.00 2.00 35.00 63.00 0.00 0.00
Average: all 0.20 1.81 31.85 66.13 0.00 0.00
#
mpstat的
报告处理器相关统计信息。
# mpstat 10 2
Linux 2.6.32-100.0.19.el5 (ol5-112.localdomain) 06/27/2011
01:59:57 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
02:00:07 PM all 1.21 0.00 0.90 0.20 0.00 0.00 0.00 97.69 980.50
02:00:17 PM all 0.70 0.00 0.40 0.00 0.00 0.10 0.00 98.79 973.77
Average: all 0.95 0.00 0.65 0.10 0.00 0.05 0.00 98.24 977.14
#
请参见 mpstat 手册页。
TOP
显示首要任务。
# top
top - 13:58:17 up 2 min, 1 user, load average: 2.54, 1.11, 0.41
Tasks: 160 total, 6 running, 154 sleeping, 0 stopped, 0 zombie
Cpu(s): 77.1%us, 22.6%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 2058872k total, 879072k used, 1179800k free, 23580k buffers
Swap: 4095992k total, 0k used, 4095992k free, 620116k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2882 oracle 20 0 610m 64m 56m R 24.9 3.2 0:02.20 oracle
2927 root 20 0 90328 3832 2604 R 24.6 0.2 0:00.89 Xorg
2931 oracle 20 0 605m 34m 31m R 11.5 1.7 0:00.35 oracle
2933 oracle 20 0 605m 34m 30m S 9.8 1.7 0:00.30 oracle
2888 oracle 20 0 614m 52m 40m S 6.9 2.6 0:00.78 oracle
2935 oracle 20 0 604m 22m 20m S 6.2 1.1 0:00.19 oracle
2937 oracle 20 0 604m 19m 17m R 4.6 1.0 0:00.14 oracle
2688 oracle -2 0 603m 15m 13m S 4.3 0.8 0:01.08 oracle
2685 oracle 20 0 603m 15m 13m S 0.7 0.8 0:00.22 oracle
2939 oracle 20 0 217m 4084 3504 R 0.7 0.2 0:00.02 oracle
2698 oracle 20 0 604m 18m 16m S 0.3 0.9 0:00.17 oracle
2702 oracle 20 0 609m 22m 14m S 0.3 1.1 0:00.17 oracle
2704 oracle 20 0 618m 21m 19m S 0.3 1.1 0:00.21 oracle
2714 oracle 20 0 603m 20m 18m S 0.3 1.0 0:00.18 oracle
1 root 20 0 10364 704 588 S 0.0 0.0 0:00.36 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 events/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuset
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
#
然后,PID 列可以与 V$PROCESS 视图上的 SPID 列匹配 以提供有关该过程的更多信息。
SELECT a.username,
a.osuser,
a.program,
spid,
sid,
a.serial#
FROM v$session a,
v$process b
WHERE a.paddr = b.addr
AND spid = '&pid';
请参阅顶部手册页。
隐藏密码
您可能需要在调用 Oracle 工具(如 SQL*Plus、导出/导入和 RMAN 等)的脚本中使用密码。从脚本本身中删除凭据的一种方法是创建一个凭据文件来保存它们。在本例中,我使用“/home/oracle/.scottcred”,其中包含以下内容。
scott/tiger
更改权限以确保文件仅对所有者可见。
$ chmod 600 /home/oracle/.scottcred
现在,将对凭据的引用替换为文件的内容。
$ expdp < /home/oracle/.scottcred schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
或者,请考虑使用以下方法之一:
Linux 上的自动启动脚本
此处已将此文本替换为单独的文章。
cron
请参阅 CRON : 在 Linux 上调度任务。
有两种方法可以编辑 crontab 文件。首先,您可以使用“crontab -l > filename”选项列出内容并将其通过管道传递到文件。编辑文件后,您可以使用“crontab filename”应用它。
- 以 root 身份登录
- crontab -l > newcron
- 编辑 newcron 文件。
或者,您可以使用“crontab -e”选项直接编辑 crontab 文件。
这些条目具有以下元素。
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12
day of week 0-7 (both 0 and 7 are Sunday)
user Valid OS user
command Valid command or script.
可以使用以下规则指定前 5 个字段。
* - All available values or "first-last".
3-4 - A single range representing each possible from the start to the end of the range inclusive.
1,2,5,6 - A specific list of values.
1-3,5-8 - A specific list of ranges.
0-23/2 - Every other value in the specified range.
以下条目在每个星期日的 01:00 运行清理脚本。脚本的任何输出或错误都会通过管道传递到 /dev/null,以防止向 root 发送邮件。
0 1 * * 0 /u01/app/oracle/dba/weekly_cleanup > /dev/null 2>&1
若要防止在上次运行仍在运行时启动新作业,请考虑使用 flock。仅当可以在指定的锁定文件上获取锁定时,作业才会运行。
From:
0 1 * * 0 /u01/app/oracle/dba/weekly_cleanup > /dev/null 2>&1
To:
0 1 * * 0 /usr/bin/flock -n /tmp/weekly_cleanup.lockfile /u01/app/oracle/dba/weekly_cleanup > /dev/null 2>&1
Tru64 上的集群范围 CRON 作业
在群集系统上,cron 是特定于节点的。如果需要每个集群触发一次作业,而不是每个节点触发一次 您需要一种替代标准 cron 作业的方法。HP 最佳实践文档中提出了一种方法 (在 TruCluster 服务器集群中使用 cron),但 在我看来,HP Tru64 Unix Enterprise Team 的 Jason Orendorf 提出了一个更优雅的解决方案 (TruCluster Clustercron)。
在他的解决方案中,Jason 创建了一个名为 /bin/cronrun 的文件,其中包含以下内容。
#!/bin/ksh
set -- $(/usr/sbin/cfsmgr -F raw /)
shift 12
[[ "$1" = "$(/bin/hostname -s)" ]] && exit 0
exit 1
此脚本仅在作为 CFS 服务cluster_root的节点上返回 TRUE (0)。
所有集群范围的作业都应该在集群的每个节点上都有一个 crontab 条目,例如。
5 * * * /bin/cronrun && /usr/local/bin/myjob
尽管 cron 作业在所有节点上都触发,但条目的“/bin/cronrun &&”部分会阻止脚本从 在除当前 CFS 服务cluster_root之外的所有节点上运行。
后台任务 (nohup)
将脚本作为后台任务运行,允许它在终端连接失败或有意关闭会话时继续运行。
将命令放入脚本中。然后使用 nohup 调用脚本,并将输出重新转换为日志文件。
nohup ./my_long_running_script.sh >> /tmp/my_long_running_script.log >2&1 &
Nohup 代表“不挂断”,如果您断开连接,它会保持进程运行。“>>”将输出重定向到日志文件。“>2&1”将标准错误 (stderr) 重定向到标准输出 (stdout),因此两者都转到日志文件。“&”将控制权释放回终端。仅单独使用“&”即可使进程在后台运行,但如果终端会话断开连接,除非包含nohup,否则它仍然会失败。
通过尾随日志文件来检查脚本的输出。
tail -f /tmp/my_long_running_script.log
NFS 挂载(Sun)
必须运行以下 deamons 才能让 PC 看到共享。
- /usr/lib/nfs/nfsd -a
- /usr/lib/nfs/mountd
- /opt/SUNWpcnfs/sbin/rpc.pcnfsd
要查看已存在的 nfs 挂载驱动器的列表,请键入。exportfs
首先,必须共享挂载点,以便远程计算机可以看到它。
share -F nfs -o ro /cdrom
接下来,可以通过root使用将共享挂载到远程计算机上。
mkdir /cdrom#1
mount -o ro myhost:/cdrom /cdrom#1
NFS 挂载 (Tru64)
在服务器计算机上,如果当前未设置 NFS,请执行以下操作。
- 应用程序管理器 ->系统管理员 ->配置 -> NFS
- 选择“将系统配置为 NFS 服务器”选项。
- 接受所有默认值。
创建挂载点目录。mkdir /u04/backup
将以下条目附加到“/etc/exports”文件中。/u04/backup
确保在目录上授予正确的权限。chmod -R 777 /u04/backup
在客户端计算机上,如果当前未设置 NFS,请执行以下操作。
- 应用程序管理器 ->系统管理员 ->配置 -> NFS
- 选择“将系统配置为 NFS 客户端”选项。
- 接受所有默认值。
创建挂载点目录。mkdir /backup
将以下条目附加到“/etc/fstab”文件中。nfs-server-name:/u04/backup /backup nfs rw,bg,intr 0 0
最后,挂载文件集。mount /backup
此时,您可以开始使用客户端计算机的装入点。感谢 Bryan Mills 对 Tru64 的帮助。
Samba/CIFS 挂载 (Linux)
请参阅 Linux Samba 配置。
创建用于装入点的目录。# mkdir /host
将以下行添加到“/etc/fstab”文件中。//192.168.0.4/public /host cifs rw,credentials=/root/.smbcred,uid=500,guid=500 0 0
创建一个名为“/root/.smbcred”的文件,其中包含以下内容。
username=myuser
password=mypassword
更改凭据文件的权限。# chmod 600 /root/.smbcred
装载共享。# mount /host
PC XStation 配置
从 http://www.cygwin.com 下载CygWin setup.exe。
安装,确保选择所有 X11R6(或旧版本中的 XFree86)可选软件包。
如果您需要 root 访问权限,请将以下条目添加到每个服务器的 /etc/securettys 文件中。
:0
在 PC 上的命令 promot 中,执行以下操作。
set PATH=PATH;c:cygwinbin;c:cygwinusrX11R6bin
XWin.exe :0 -query <server-name>
X 环境应该在新窗口中启动。
默认情况下,许多 Linux 发行版不启动 XDMCP。要允许从 Cygwin 访问 XDMCP,请编辑“/etc/X11/gdm/gdm.conf”文件。在“[xdmcp]”部分下,设置“Enable=true”。
如果要在会话期间启动任何 X 应用程序,则需要设置 DISPLAY 环境变量。 请记住,您充当的是 XStation,而不是服务器本身,因此必须按如下方式设置此变量。DISPLAY=<client-name>:0.0; export DISPLAY
xauth
使用 su
和sud
命令时,对 X 服务器的访问可能会被破坏。xauth该命令提供了解决方案。该过程包括以下阶段:
- 检查您当前的显示编号。
- 用于获取魔术 cookie 列表。
xauth list
- 切换到新用户。
- 用于设置显示编号的魔术 Cookie。
xauth add
- 确保显示编号仍设置正确。
下面显示了一个示例。
$ echo $DISPLAY
localhost:12.0
$ xauth list
ol6.localdomain/unix:12 MIT-MAGIC-COOKIE-1 be64852468ca3c334720b10bb3c4d3cb
$ sudo su oracle
$ xauth add ol6.localdomain/unix:12 MIT-MAGIC-COOKIE-1 be64852468ca3c334720b10bb3c4d3cb
$ export DISPLAY=localhost:12.0
您现在将能够访问 X 服务器,就像在用户切换之前一样。
有用的配置文件设置
请参阅 Linux 组和用户:重要文件。
以下“.profile”设置依赖于设置为 Korn shell (/bin/ksh) 的用户的默认 shell。
可以通过添加以下条目来配置退格键。stty erase "^H"
可以通过添加以下条目来使用 [Esc][k] 访问命令行历史记录。set -o vi
通过添加以下条目,可以使用 [Esc] 键的双击来配置自动完成路径。set filec
有关详细信息,请参阅: