oracle日志存放路径

说实话,Oracle日志很有趣。
当我第一次接手这个系统时,我几乎感到失落。
请记住这一点,因为 Windows 和 UNIX 系统实际上有很大不同。

以Windows系统为例。
您之前可能遇到过ORCL实例,日志默认放置在C:\app\oracle\oradata\ORCL\redo中。
我的一个朋友硬盘上的可用空间不足,因此他通过直接更改 D 盘分区的路径来解决该问题,只需一行代码:db_create_redo_log_dest='D:\new_path\redo'。
重启数据库后,问题消失。
重要的是要记住在 D 驱动器上留出足够的空间。
那一刻,系统几乎崩溃了。

UNIX/Linux 是完全不同的。
我记得曾经在RHEL6 上安装ORCL时,默认路径是/u01 /app/oracle/oradata/ORCL/redo。
硬盘驱动器是共享的,但隔壁的数据库崩溃了,日志填满了我的驱动器。
使用 SQLPlus 和 ALTER SYSTEM SET db_create_redo_log_dest='/u02 /data/redo' 快速修改 SPFILE。
不要忘记添加 SCOPE=BOTH。
否则,参数将只存在于内存中。
这次我吸取了教训,尝试自己挂载日志盘。

有趣的是存档日志。
我们有一个使用非存档模式的客户数据库,有一天它突然崩溃了。
数据恢复非常快,只丢失了半天的交易数据。
我告诉他们,ARCHIVELOG模式比较麻烦,但关键时刻可以救命。
然后我们将归档日志备份到异地NAS,并启用了RMAN备份策略,这直接提高了系统稳定性。

更改路径时最大的问题是权限。
我曾经看到一个运维人员将日志移至 EFS 挂载卷,但忘记授予 Oracle 用户读取权限。
结果无法写入日志,数据库挂起2 个小时。
因此每次更改路径时,首先运行 ls -l /new/path/redo 以确保 oracle 用户具有 rw 权限。

您还应该注意版本差异。
从版本 1 2 c 开始,几个参数发生了变化。
我记得一个 1 9 c 客户使用 ALTER SYSTEM SET ... SCOPE=BOTH 编写 SPFILE 并报告错误。
后来查了官方文档,发现需要使用ALTER SYSTEM SET ... GLOBALLY。
我自己从来没有这样做过。
我记得数据在 X 左右,但您可能想检查当前版本是否这么说。

简单来说,日志管理类似于仓库管理。
错误的地点、没有空间、没有许可,任何问题都足以让你喝醉。
分离日志磁盘,定期使用V$LOG进行日志记录我们建议检查您的周期、使用存档模式并做好备份。
这比什么都好。

如何创建日志文件如何创建日志文件夹

嘿,我以前做过这个,让我简单解释一下。

去年我在北京帮助朋友调试有bug的软件。
男孩不断制造bug,让人头疼。
最终我找到了让它写日志的方法,立刻就发现了问题。

如果你想创建一个日志文件,这并不难。
在 Windows 中您可以直接使用代码。

比如使用Python,这些东西我都很熟悉。
看看这个:
python import log
设置日志文件的路径 logging.basicConfig(filename='myapp.log', level=logging.DEBUG)
记录什么 logging.debug('这是一条调试消息') logging.info('这是一条信息性消息') logging.warning('这是一条警告消息') logging.error('这是一条错误消息') logging.ritic('这是一条关键消息')
保存一个名为 logtest.py 的文件并运行它。
在当前目录下可以看到myapp.log。

看看这个文件里写了什么:
DEBUG:这是一条调试消息 信息:这是一条信息性消息 注意:这是一条警告消息 错误:这是一条错误消息 重要:这是一条重要消息
仅此而已。
多么简单啊。

如果你想使用.NET,也类似。
您使用 C 创建控制台应用程序,然后:
csharp 使用该系统; 使用系统.IO; 使用 System.Diagnostics;
类程序 { 静态无效Main() { //创建日志文件 字符串 logPath = "app.log"; 使用 (StreamWriter writer = new StreamWriter(logPath, true)) { writer.WriteLine("记录条目:" + DateTime.Now); writer.WriteLine("应用程序已启动。
");
// 记录一些东西 Debug.WriteLine("这是一条调试消息"); Trace.WriteLine("这是一条跟踪消息"); }
保存并运行。
在项目目录中还可以看到app.log。

这件事很简单。
如果你想做一些复杂的事情,比如写日志什么的,我就不敢废话了。
我这里没试过,可能不太好。

如果你用这个方法就足够了。
不要全力以赴,很容易出错。

日志文件丢失或出错的情况下如何恢复SQL数据库

需要说明的是,恢复SQL数据库的mdf文件比想象的简单和困难,但关键步骤不要搞错。
我们先来说说最重要的事情。
在停止数据库之前,您必须创建一个具有相同名称的新空数据库。
这可以有效避免恢复过程中“数据库已存在”的冲突——去年我们在运行那个项目时就差点陷入这个困境。
还有一点,在删除新建数据库的日志文件时,不要同时删除系统日志。
覆盖是对要恢复的mdf文件的主要操作,但必须保证原来的日志文件仍在D:\Data\中。
很多人不重视这一点。
还有一个更重要的细节。
使用DBCC REBUILD LOG重建日志文件时,必须指定原始日志路径,否则会提示找不到文件。
去年我们在处理3 000级数据库的时候,就因为这个问题卡了差不多半天。

一开始我以为直接覆盖mdf就可以了,后来发现这是错误的。
数据库必须设置为紧急修复模式才能强制加载。
运行 SET STATUS 命令时,请记住使用 DB_ID 函数传递正确的数据库名称。
等等,还有一件事。
虽然可以跳过数据库一致性验证,但建议这样做,否则可能会漏掉隐藏的错误。
比如有一次我们跳过了这一步,后来发现索引损坏了。

在最后一步中,不要忘记将其更改回正常状态并撤销系统目录修改权限,否则插入新数据会出现问题。
说实话,还是挺难的,但是一旦掌握了顺序,其实就变得很简单了。