oracle的毛病

合集下载

oracle常见故障处理手册

oracle常见故障处理手册

oracle常见故障处理手册一、数据库启动与关闭故障1.数据库启动失败原因:可能是由于Oracle数据库配置不正确、系统环境变量设置不正确、初始化参数设置不正确等原因导致。

解决方法:检查数据库日志文件,查看错误信息,根据错误信息进行相应的修复。

2.数据库关闭失败原因:可能是由于数据库事务未完成、数据库锁未释放等原因导致。

解决方法:检查数据库日志文件,查看错误信息,根据错误信息进行相应的修复。

二、连接故障1.连接不成功原因:可能是由于网络连接问题、数据库用户名或密码错误、数据库实例名错误等原因导致。

解决方法:检查网络连接是否正常,检查数据库用户名和密码是否正确,检查数据库实例名是否正确。

2.连接断开原因:可能是由于网络不稳定、数据库服务器异常等原因导致。

解决方法:检查网络连接是否正常,检查数据库服务器是否正常。

三、数据恢复故障1.数据丢失原因:可能是由于数据库损坏、磁盘故障等原因导致。

解决方法:根据数据丢失的原因,选择相应的恢复方法,如使用备份恢复数据或使用日志文件恢复数据。

2.数据不一致原因:可能是由于数据修改不一致、数据复制不一致等原因导致。

解决方法:检查数据修改和复制的日志文件,找到不一致的数据并修复。

四、性能优化故障1.性能下降原因:可能是由于CPU占用过高、内存占用过高、磁盘IO过大等原因导致。

解决方法:优化数据库配置参数,如增加内存、优化磁盘IO等。

2.查询速度慢原因:可能是由于查询语句不优化、表没有建立索引等原因导致。

解决方法:优化查询语句,为表建立索引等。

五、存储管理故障1.存储空间不足原因:可能是由于磁盘空间不足、表空间不足等原因导致。

解决方法:清理磁盘空间,增加磁盘空间,调整表空间大小等。

2.数据文件丢失或损坏原因:可能是由于磁盘故障、人为误删除或修改等原因导致。

解决方法:使用备份恢复数据文件或修复损坏的数据文件。

六、网络连接故障1.网络连接中断原因:可能是由于网络设备故障、网络连接线故障等原因导致。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案故障描述:在使用ORACLE数据库的过程中,可能会遇到各种各样的故障,例如数据库无法启动、数据库连接失败、数据丢失等问题。

本文将针对这些故障提供解决方案。

1. 数据库无法启动的解决方案:- 检查数据库实例是否正常启动,可以使用`lsnrctl status`命令来查看监听器的状态。

- 检查数据库的日志文件,例如alert.log,查看是否有任何错误信息。

- 检查数据库的参数文件,确保参数设置正确。

- 尝试重启数据库实例,可以使用`shutdown immediate`和`startup`命令来重启数据库。

2. 数据库连接失败的解决方案:- 检查网络连接是否正常,可以使用ping命令来测试数据库服务器的连通性。

- 检查数据库监听器是否正常运行,可以使用`lsnrctl status`命令来查看监听器的状态。

- 检查数据库的监听器配置文件,确保监听器监听的端口和服务名设置正确。

- 检查数据库的用户和密码是否正确,可以尝试使用sqlplus工具来连接数据库。

3. 数据丢失的解决方案:- 检查数据库的备份情况,如果有备份文件,可以尝试恢复数据。

- 如果没有备份文件,可以尝试使用数据库的日志文件进行恢复,可以使用`recover database`命令来进行恢复操作。

- 如果以上方法都无法恢复数据,可以尝试使用第三方工具来进行数据恢复。

4. 数据库性能问题的解决方案:- 检查数据库的性能参数设置,例如SGA和PGA的大小,可以根据实际情况进行调整。

- 检查数据库的索引情况,如果索引过多或者索引失效,可以进行重新建立或者优化。

- 检查数据库的SQL语句,如果有性能较差的SQL语句,可以进行优化或者重写。

- 检查数据库的硬件资源使用情况,例如CPU和内存的使用情况,可以根据实际情况进行调整。

5. 数据库安全问题的解决方案:- 检查数据库的用户和权限设置,确保只有授权的用户能够访问数据库。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案引言概述:ORACLE 数据库是目前企业常用的一种数据库管理系统,但在使用过程中难免会遇到各种故障。

本文将介绍一些常见的 ORACLE 数据库故障,并提供相应的解决方案,帮助读者更好地应对数据库故障。

一、数据库连接问题1.1 连接超时:当数据库连接超时时,可以通过增加连接超时时间的方式解决。

在 ORACLE 数据库中,可以通过修改 sqlnet.ora 文件中的SQLNET.INBOUND_CONNECT_TIMEOUT 参数来设置连接超时时间。

1.2 连接被拒绝:如果数据库连接被拒绝,可能是由于数据库实例未启动、监听器未启动或者网络故障等原因导致。

解决方案包括启动数据库实例、启动监听器以及检查网络连接是否正常。

1.3 连接池问题:当数据库连接池达到最大连接数时,新的连接请求会被拒绝。

解决方案包括增加连接池的最大连接数、释放闲置连接以及优化数据库连接的使用。

二、数据丢失问题2.1 意外删除数据:当数据被意外删除时,可以通过数据库备份和恢复的方式解决。

可以使用RMAN 工具进行数据库备份,并在需要时使用备份进行恢复操作。

2.2 数据库文件损坏:当数据库文件损坏时,可以使用 RMAN 工具进行数据库文件的修复。

RMAN 提供了诊断和修复数据库文件的功能,可以帮助解决数据库文件损坏的问题。

2.3 数据库坏块:当数据库出现坏块时,可以使用 RMAN 工具进行坏块的修复。

RMAN 提供了坏块检测和修复的功能,可以帮助解决数据库坏块问题。

三、性能问题3.1 慢查询:当数据库查询变慢时,可以通过优化查询语句、创建索引、增加硬件资源等方式解决。

可以使用 Explain Plan 工具来分析查询语句的执行计划,找出慢查询的原因,并进行相应的优化。

3.2 死锁:当数据库出现死锁时,可以通过锁等待超时、死锁检测和解锁等方式解决。

可以使用 V$LOCK 和 V$SESSION 视图来查看当前的锁信息,并根据情况进行相应的解锁操作。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言在使用ORACLE数据库过程中,可能会遇到各种故障问题,如数据库无法启动、数据损坏、性能下降等。

本文将针对这些常见的故障问题提供解决方案,帮助用户快速恢复数据库的正常运行。

二、数据库无法启动的解决方案1. 检查数据库参数设置:确认数据库参数是否正确配置,包括SGA大小、日志文件大小、内存分配等。

2. 检查数据库文件完整性:使用DBVERIFY工具检查数据库文件的完整性,如果发现文件损坏,可以使用RMAN工具进行恢复。

3. 检查数据库监听器状态:确认数据库监听器是否正常运行,可以使用lsnrctl命令查看监听器状态,并进行必要的重启操作。

4. 检查数据库日志文件:查看数据库日志文件,寻找可能导致数据库无法启动的错误信息,并根据错误信息进行相应的处理。

三、数据损坏的解决方案1. 使用RMAN工具进行数据恢复:RMAN是ORACLE提供的备份和恢复工具,可以使用RMAN进行数据恢复操作。

首先需要创建一个可用的备份,然后使用RMAN进行数据恢复。

2. 使用数据泵进行数据导出和导入:如果无法使用RMAN进行数据恢复,可以考虑使用数据泵工具进行数据导出和导入操作。

首先将损坏的数据库导出为一个可用的数据文件,然后再将数据导入到新的数据库中。

3. 使用逻辑备份进行数据恢复:如果没有可用的物理备份,可以考虑使用逻辑备份进行数据恢复。

逻辑备份是指将数据库的逻辑结构导出为SQL语句,并通过执行这些SQL语句来恢复数据库。

四、性能下降的解决方案1. 优化SQL语句:通过分析数据库的执行计划,找出影响性能的SQL语句,并进行优化。

可以使用ORACLE提供的SQL调优工具,如SQL Tuning Advisor和SQL Access Advisor。

2. 增加硬件资源:如果数据库负载过高,可以考虑增加硬件资源,如增加CPU、内存或存储空间等,以提高数据库的性能。

3. 重新设计数据库结构:如果数据库的表结构设计不合理,可能会导致性能下降。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、背景介绍ORACLE数据库是一种关系型数据库管理系统,广泛应用于企业的数据存储和管理中。

然而,由于各种原因,数据库可能会浮现故障,这会对企业的正常运营造成严重影响。

因此,制定一套完善的ORACLE数据库故障解决方案对于保障数据的安全和稳定性至关重要。

二、故障分类1. 数据库无法启动:- 可能原因:数据库实例崩溃、数据库文件损坏等。

- 解决方案:根据错误日志定位问题,修复或者恢复数据库文件,重新启动数据库实例。

2. 数据库性能下降:- 可能原因:数据库负载过高、SQL语句优化不当等。

- 解决方案:分析数据库性能监控数据,优化SQL语句,增加硬件资源,调整数据库参数等。

3. 数据库连接问题:- 可能原因:网络故障、数据库监听程序异常等。

- 解决方案:检查网络连接,重启监听程序,配置防火墙规则等。

4. 数据丢失或者损坏:- 可能原因:人为操作失误、硬件故障等。

- 解决方案:定期备份数据库,使用闪回技术恢复数据,修复或者替换损坏的硬件设备。

5. 数据库安全问题:- 可能原因:未授权访问、漏洞利用等。

- 解决方案:加强数据库安全设置,限制访问权限,及时安装数据库补丁,定期进行安全审计。

三、故障解决步骤1. 采集信息:- 根据用户反馈和日志文件,了解故障现象和发生时间。

- 检查数据库版本、操作系统环境、硬件配置等相关信息。

2. 分析问题:- 根据采集的信息,确定故障类型和可能的原因。

- 使用ORACLE提供的工具和命令,对数据库进行诊断和分析。

3. 制定解决方案:- 根据问题的严重程度和影响范围,制定相应的解决方案。

- 针对不同的故障类型,选择合适的方法和工具进行修复或者恢复。

4. 执行解决方案:- 按照制定的解决方案,逐步执行修复或者恢复操作。

- 注意备份数据,避免造成进一步的数据丢失或者损坏。

5. 验证修复效果:- 检查数据库是否正常启动,功能是否正常运行。

- 对修复后的数据库进行性能测试,确保问题得到解决。

ORACLE数据库故障解决方案

ORACLE数据库故障解决方案

ORACLE数据库故障解决方案Oracle数据库是当前世界上应用最广泛的关系型数据库之一,但在日常运维中,难免会遇到各种故障,如数据损坏、数据库停机等。

因此,能够迅速、准确地解决数据库故障至关重要。

本文将介绍几种常见的Oracle数据库故障解决方案。

1.数据库无法启动当Oracle数据库无法启动时,往往是由于以下原因导致的:数据库实例未启动、数据库文件损坏或不完整、数据库连接问题等。

我们可以采取以下步骤来解决这个问题:- 检查错误日志:查看数据库的错误日志文件(alert.log)以获取详细的错误信息,确定故障原因。

- 检查数据库实例:在Oracle数据库中,数据库实例由后台进程(如后台进程和前台进程)组成。

如果实例未启动,可以使用SQL*Plus 工具来手动启动实例,并确保每个后台进程正常运行。

- 恢复数据库文件:如果数据库文件损坏或不完整,可以使用Oracle提供的RMAN工具来恢复文件,或者使用备份文件进行恢复。

- 检查数据库连接:使用SQL*Plus工具检查数据库连接是否正常,如果存在连接问题,可以尝试重新配置网络服务或重启数据库监听器。

2.数据损坏数据损坏是Oracle数据库常见的故障之一,可能由硬件故障、软件错误、人为操作错误等原因引起。

当发生数据损坏时,可以使用以下方案进行修复:-恢复备份数据:如果有备份数据,则可以通过将备份数据恢复到故障数据库来解决数据损坏问题。

尽量选择最新的备份数据,以尽可能减少数据丢失。

- 利用日志文件:如果无法恢复备份数据,可以使用Oracle的恢复管理工具RMAN来利用归档日志文件进行恢复。

RMAN可以将日志文件中的变更应用到数据库中,避免数据丢失。

-手动修复:在一些情况下,可能需要手动修复数据。

具体操作方法取决于数据损坏的程度和类型,需要根据具体的情况采取相应的措施。

3.性能问题Oracle数据库性能问题常常涉及到数据库的优化、调整和配置。

下面是解决性能问题的一些常见方法:-查询优化:通过优化SQL查询语句,可以提高查询的性能。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、问题描述在使用ORACLE数据库的过程中,可能会遇到各种故障,包括但不限于数据库无法启动、连接超时、数据丢失等问题。

本文将针对这些常见问题提供解决方案。

二、数据库无法启动的解决方案1. 检查数据库参数配置:确认数据库参数配置文件是否正确,包括数据库名称、监听器、内存分配等。

2. 检查数据库实例状态:使用SQL*Plus工具登录数据库,执行`startup`命令,查看数据库实例的启动状态,根据错误信息进行相应的处理。

3. 检查数据库日志文件:查看数据库的日志文件,如alert.log,定位错误原因,并根据具体情况进行修复。

4. 检查数据库文件完整性:使用`DBVERIFY`工具检查数据库文件的完整性,如果发现损坏的文件,可以使用备份文件进行替换。

三、连接超时的解决方案1. 检查网络连接:确认数据库服务器和客户端之间的网络连接是否正常,可以使用`ping`命令检测网络延迟和丢包情况。

2. 检查数据库监听器:使用`lsnrctl status`命令检查数据库监听器的状态,确认监听器是否正常运行。

3. 调整数据库连接参数:根据具体情况,可以修改数据库连接参数,如`SQLNET.INBOUND_CONNECT_TIMEOUT`、`SQLNET.EXPIRE_TIME`等,以增加连接超时时间。

4. 检查数据库资源利用率:使用`TOP`或者`VMSTAT`等工具检查数据库服务器的资源利用率,如CPU、内存、磁盘IO等,如果资源利用率过高,可以考虑优化数据库配置或者升级硬件设备。

四、数据丢失的解决方案1. 检查数据库备份:如果有数据库备份,可以使用备份文件进行数据恢复。

2. 使用闪回技术:ORACLE数据库提供了闪回技术,可以在不恢复整个数据库的情况下,将数据库恢复到某个时间点的状态,从而避免数据丢失。

3. 使用日志文件进行恢复:如果数据库启用了归档日志模式,可以使用归档日志文件进行数据恢复。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、概述ORACLE 数据库是一种关系型数据库管理系统,广泛应用于企业级应用中。

然而,在使用过程中,可能会遇到各种故障情况,例如数据库无法启动、数据丢失、性能下降等。

为了保证数据库的稳定运行,需要及时解决这些故障。

本文将介绍一些常见的 ORACLE 数据库故障解决方案。

二、数据库无法启动1. 检查数据库实例是否正常启动。

使用命令 `ps -ef | grep pmon` 查看数据库实例进程是否存在。

如果不存在,可能是由于数据库实例未正常启动导致的故障。

解决方案:使用 `sqlplus / as sysdba` 命令登录到数据库,执行 `startup` 命令启动数据库实例。

2. 检查数据库控制文件是否损坏。

控制文件是 ORACLE 数据库的重要组成部份,记录了数据库的结构信息。

如果控制文件损坏,数据库将无法启动。

解决方案:使用 `ls -l` 命令检查控制文件的状态。

如果控制文件状态为`MISSING` 或者 `OFFLINE`,则需要恢复控制文件。

可以使用备份的控制文件替换损坏的控制文件,并执行 `startup` 命令启动数据库。

三、数据丢失1. 检查数据库备份情况。

数据库备份是防止数据丢失的重要手段。

如果数据库备份完备,可以通过备份文件进行数据恢复。

解决方案:使用 `rman` 工具进行数据库恢复。

首先,使用 `list backup` 命令查看备份文件的信息。

然后,使用 `restore database` 命令恢复数据库。

2. 检查数据文件是否损坏。

数据文件是 ORACLE 数据库中存储数据的文件。

如果数据文件损坏,可能导致数据丢失。

解决方案:使用 `select file#, name, status from v$datafile;` 命令检查数据文件的状态。

如果数据文件状态为 `RECOVER`,则需要进行数据恢复。

可以使用备份的数据文件替换损坏的数据文件,并执行 `recover datafile <file#>` 命令进行数据恢复。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言ORACLE 数据库是一款广泛应用于企业级应用系统的关系数据库管理系统。

然而,在数据库运行过程中,可能会浮现各种故障,如数据损坏、性能下降、连接问题等。

本文将提供一些常见的 ORACLE 数据库故障解决方案,以匡助管理员快速解决问题并恢复数据库的正常运行。

二、故障解决方案1. 数据损坏数据库数据损坏可能导致数据丢失或者无法访问。

以下是一些常见的数据损坏问题及解决方案:- 数据块损坏:使用RMAN 工具进行数据块检查,并使用备份数据进行恢复。

- 表空间损坏:使用RMAN 工具进行表空间检查,并使用备份数据进行恢复。

- 表或者索引损坏:使用 DBMS_REPAIR 工具进行修复,或者从备份中恢复受损的对象。

2. 性能下降数据库性能下降可能导致用户体验差和系统响应延迟。

以下是一些常见的性能下降问题及解决方案:- 确保数据库服务器具有足够的硬件资源,如 CPU、内存和磁盘空间。

- 优化 SQL 查询语句,使用索引、避免全表扫描等。

- 定期采集和分析数据库性能指标,如等待事件、锁定和死锁等,以找出性能瓶颈并采取相应措施。

3. 连接问题连接问题可能导致用户无法连接到数据库或者连接超时。

以下是一些常见的连接问题及解决方案:- 检查数据库监听器是否运行,并确保监听器配置正确。

- 检查网络连接是否正常,如网络配置、防火墙设置等。

- 检查数据库实例是否正常启动,并检查数据库服务是否处于运行状态。

4. 容灾和备份恢复容灾和备份恢复是数据库管理的重要方面,以确保数据的可靠性和可恢复性。

以下是一些常见的容灾和备份恢复问题及解决方案:- 使用 Oracle Data Guard 实现数据库的冗余和自动故障转移。

- 定期进行数据库备份,并测试备份的可恢复性。

- 在灾难发生时,使用备份进行数据库恢复,并确保恢复过程的可靠性和完整性。

5. 安全性问题数据库安全性问题可能导致数据泄露、未授权访问等风险。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言ORACLE 数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。

然而,在数据库运行过程中,可能会遇到各种故障,如数据库崩溃、数据丢失、性能下降等。

本文将介绍一些常见的ORACLE数据库故障解决方案,以匡助管理员快速恢复数据库的正常运行。

二、数据库崩溃的解决方案1. 数据库崩溃可能由于硬件故障、软件错误、人为操作等原因引起。

当数据库崩溃时,管理员应采取以下步骤进行故障排查和修复:a. 检查数据库日志文件,查找崩溃前的异常信息;b. 尝试重启数据库实例,使用备份恢复数据;c. 如果无法恢复数据,可以考虑使用数据库恢复工具进行修复。

2. 数据丢失的解决方案数据丢失可能由于误删除、磁盘损坏等原因导致。

为了防止数据丢失,管理员应采取以下预防措施:a. 定期备份数据库,并将备份文件存储在安全的位置;b. 使用数据库的日志文件功能,可以实现数据的增量备份;c. 配置RAID技术,提高数据库的容错能力。

3. 性能下降的解决方案当数据库性能下降时,可能会导致用户访问延迟、查询速度变慢等问题。

管理员可以采取以下措施来提高数据库性能:a. 优化数据库的查询语句,使用索引、视图等技术来加速查询;b. 增加硬件资源,如CPU、内存等,提升数据库的处理能力;c. 定期清理数据库,删除不必要的数据和索引,减少数据库的负载。

4. 数据库安全的解决方案数据库安全是保护数据库免受未经授权的访问和数据泄露的重要任务。

管理员应采取以下安全措施来保护数据库:a. 设置强密码策略,要求用户使用复杂的密码,并定期更换密码;b. 限制数据库用户的权限,只赋予其必要的访问权限;c. 定期更新数据库软件和补丁,以修复已知的安全漏洞;d. 使用防火墙和入侵检测系统,监控数据库的网络访问。

三、总结本文介绍了ORACLE数据库常见故障的解决方案,包括数据库崩溃、数据丢失、性能下降和数据库安全等方面。

Oracle数据库操作常见错误及解决方案

Oracle数据库操作常见错误及解决方案

ORA-01578:Oracle data block corrupted(file # num,block # num)产生原因:当ORACLE访问一个数据块时,由于:1、硬件的I/O错误;2、操作系统的I/O错误或缓冲问题;3、内存或paging问题;4、ORACLE试图访问一个未被格式化的系统块失败;5、数据文件部分溢出等上述几种情况的一种引起了逻辑坏块或者物理坏块,这时就会报ORA-01578的错误。

解决方式:由于ORACLE只有在访问到有问题的数据文件时才会报错,所以报错的时间有可能会比实际出错的时间要晚,如果ORA-01578出错信息提示数据坏块指向的是用户自己的数据文件,则用以下方法来解决:<3>.startup restrict<4>.创建一个临时表:SQL>create table errortemp as select * from error;(error是坏表的表名)<5>.把event从init.ora文件中删掉并重起数据库<6>.rename坏表,把临时表rename成坏表的表名<7>.创建表上的INDEX等如果ORA-01578出错信息提示数据坏块指向的是数据字典或者是回滚段的话,你应该立即与ORACLE公司联系,共同商量一个好的解决办法。

ORA-03113:end-of-file on communication channel产生原因:通讯不正常结束,从而导致通讯通道终止解决方法:1>.检查是否有服进程不正常死机,可从alert.log得知2>.检查sql*Net Driver是否连接到ORACLE可执行程序3>.检查服务器网络是否正常,如网络不通或不稳定等4>.检查同一个网上是否有两个同样名字的节点5>.检查同一个网上是否有重复的IP地址ORA-00942:table or view does not exist产生原因:这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运行,则可能是版本错误。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案引言概述:ORACLE 数据库是目前最常用的企业级数据库之一,然而在使用过程中,难免会遇到各种故障。

本文将介绍一些常见的 ORACLE 数据库故障解决方案,帮助读者更好地应对数据库故障。

一、数据库连接问题的解决方案:1.1 检查网络连接:确保数据库服务器和客户端之间的网络连接正常。

可以通过 ping 命令或者其他网络工具来测试网络连通性。

1.2 检查监听器状态:监听器是用于监听数据库连接请求的服务,如果监听器未启动或者出现异常,可能导致数据库连接失败。

可以使用 lsnrctl 命令来检查监听器的状态,并根据需要启动或重启监听器。

1.3 检查防火墙设置:防火墙可能会阻止数据库连接请求通过特定的端口,导致连接失败。

确保防火墙的设置允许数据库连接请求通过所需的端口。

二、数据库备份与恢复问题的解决方案:2.1 定期备份数据库:定期备份数据库是防止数据丢失的重要手段。

可以使用RMAN (Recovery Manager) 工具进行数据库备份,可以选择全量备份、增量备份或者归档日志备份等方式。

2.2 恢复数据库:当数据库出现故障时,可以使用备份文件进行数据库恢复。

可以通过 RMAN 工具进行数据库恢复,根据备份类型选择相应的恢复策略。

2.3 监控数据库恢复过程:在进行数据库恢复时,需要密切监控恢复过程,确保恢复过程的顺利进行。

可以使用 RMAN 工具提供的恢复状态查询命令来监控恢复进度。

三、数据库性能问题的解决方案:3.1 优化 SQL 查询语句:SQL 查询语句是数据库性能的关键因素之一。

通过优化 SQL 查询语句,可以提高数据库的查询效率。

可以使用 EXPLAIN PLAN 命令来分析查询语句的执行计划,并根据需要进行索引优化或者重写查询语句。

3.2 调整数据库参数:数据库参数的设置对数据库性能有很大影响。

可以通过修改数据库参数来优化数据库性能,如调整缓冲区大小、并发连接数等。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案故障解决方案一、背景介绍ORACLE数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。

然而,在使用ORACLE数据库的过程中,可能会遇到各种故障,如数据丢失、数据库无法启动、性能下降等问题。

为了保证数据库的稳定运行,需要及时解决这些故障。

二、故障解决方案以下是针对ORACLE数据库常见故障的解决方案:1. 数据库无法启动故障描述:数据库无法正常启动,可能会出现错误提示。

解决方案:- 检查数据库参数文件是否正确配置,并确保文件路径正确。

- 检查数据库控制文件是否损坏,如果损坏,可以使用备份文件进行恢复。

- 检查数据库日志文件是否损坏,如果损坏,可以尝试使用归档日志进行恢复。

- 如果以上方法无法解决问题,可以尝试使用ORACLE提供的数据库恢复工具。

2. 数据丢失故障描述:数据库中的数据突然丢失,无法访问。

解决方案:- 检查是否有其他用户或程序误删除了数据,可以通过审查数据库日志或使用备份进行数据恢复。

- 检查数据库是否发生了物理损坏,可以使用ORACLE提供的数据恢复工具进行修复。

- 如果数据库中的数据没有备份,可以尝试使用数据恢复软件进行恢复。

3. 性能下降故障描述:数据库查询或操作速度变慢,响应时间延迟。

解决方案:- 检查数据库的硬件资源是否足够,如CPU、内存、磁盘空间等。

- 优化数据库的查询语句,使用索引、分区等技术提高查询效率。

- 检查数据库的统计信息是否准确,可以使用ORACLE提供的统计信息收集工具进行更新。

- 如果以上方法无法解决问题,可以考虑对数据库进行分析和调优,如重建索引、优化SQL语句等。

4. 数据库安全性问题故障描述:数据库面临安全威胁,如未经授权的访问、数据泄露等。

解决方案:- 加强数据库的访问控制,设置复杂的密码策略、限制登录IP等。

- 定期备份数据库,并将备份数据存储在安全的位置。

- 安装和配置防火墙、入侵检测系统等安全设备,防止未经授权的访问。

oracle数据库故障处理案例

oracle数据库故障处理案例

oracle数据库故障处理案例Oracle数据库是一种常见的关系数据库管理系统,它在企业应用中被广泛使用。

然而,由于各种原因,Oracle数据库可能会遇到各种故障和问题。

本文将列举一些常见的Oracle数据库故障处理案例,并提供解决方案。

1. 数据库无法启动:在某些情况下,Oracle数据库可能无法启动。

这可能是由于数据库文件损坏、数据库实例配置错误、内存不足等原因引起的。

解决此问题的方法包括修复数据库文件、重新配置数据库实例和增加内存容量。

2. 数据库性能下降:当Oracle数据库的性能下降时,可能会导致应用程序变慢或无响应。

这可能是由于数据库表空间过度使用、索引失效、SQL语句优化不当等原因引起的。

解决此问题的方法包括清理表空间、重新创建索引和优化SQL语句。

3. 数据库连接问题:有时候,应用程序无法连接到Oracle数据库。

这可能是由于网络问题、数据库实例未启动、监听器配置错误等原因引起的。

解决此问题的方法包括检查网络连接、启动数据库实例和检查监听器配置。

4. 数据库备份和恢复:数据库备份和恢复是保证数据安全和可用性的关键。

当数据库发生故障或数据丢失时,需要进行数据库恢复。

解决此问题的方法包括使用RMAN工具进行备份和恢复、使用闪回5. 数据库锁定和死锁:在多用户环境下,可能会发生数据库锁定和死锁问题。

这可能是由于事务并发操作引起的。

解决此问题的方法包括查找锁定和死锁的相关会话、释放锁定和解决死锁。

6. 数据库日志文件满:Oracle数据库的日志文件用于记录数据库操作和恢复信息。

当日志文件满时,可能会导致数据库无法继续进行操作。

解决此问题的方法包括增加日志文件大小、清理旧的日志文件和优化日志文件切换策略。

7. 数据库表空间不足:Oracle数据库的表空间用于存储数据和索引。

当表空间不足时,可能会导致无法插入新数据或创建新索引。

解决此问题的方法包括增加表空间大小、清理无效数据和重新分配表空间。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言在使用ORACLE数据库的过程中,难免会遇到各种故障,这些故障可能导致数据库无法正常运行,影响业务的连续性和数据的完整性。

因此,本文将介绍一些常见的ORACLE数据库故障,并提供相应的解决方案,以匡助管理员和开辟人员快速恢复数据库运行。

二、故障类型及解决方案1. 数据库无法启动故障现象:尝试启动数据库时,遇到错误提示,无法成功启动。

解决方案:1) 检查数据库实例是否正常关闭,如果没有正常关闭,使用SHUTDOWN命令关闭数据库实例。

2) 检查数据库参数文件是否正确配置,确保参数文件路径正确,参数设置正确。

3) 检查数据库控制文件是否损坏,如果损坏,可以尝试恢复备份的控制文件。

4) 检查数据库日志文件是否损坏,如果损坏,可以尝试恢复备份的日志文件。

5) 检查数据库文件是否损坏,如果损坏,可以尝试恢复备份的数据文件。

2. 数据库性能下降故障现象:数据库查询响应时间延长,业务处理变慢。

解决方案:1) 分析数据库性能指标,如CPU利用率、内存利用率、磁盘IO等,找出性能瓶颈。

2) 优化SQL语句,如添加索引、重写查询语句等,提高查询效率。

3) 调整数据库参数,如增加SGA大小、调整PGA大小等,优化内存使用。

4) 分析数据库锁等待情况,解决锁冲突问题,提高并发处理能力。

5) 定期采集数据库统计信息,重新生成优化器统计信息,提高查询计划的准确性。

3. 数据库备份恢复故障现象:数据库数据丢失或者损坏,需要进行数据恢复。

解决方案:1) 检查数据库备份情况,如果有可用的备份,可以尝试进行恢复操作。

2) 使用RMAN工具进行数据库备份和恢复操作,可以选择彻底恢复或者部份恢复。

3) 如果没有备份,可以尝试使用闪回技术进行数据恢复,还原到历史状态。

4) 如果数据文件损坏,可以尝试使用数据文件的备份进行恢复,或者使用RMAN进行数据文件的恢复。

5) 恢复完成后,进行数据一致性检查,确保数据库的完整性。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案ORACLE数据库故障解决方案一、引言ORACLE数据库是一种常用的关系型数据库管理系统,广泛应用于企业级应用中。

然而,由于各种原因,数据库可能会浮现故障,导致数据不可用或者系统不稳定。

本文将介绍一些常见的ORACLE数据库故障,并提供相应的解决方案。

二、常见故障及解决方案1. 数据库无法启动故障现象:当尝试启动数据库时,系统提示无法连接到数据库实例。

解决方案:- 检查数据库实例是否已启动。

可以使用命令`lsnrctl status`来检查监听器的状态,确保监听器已启动。

- 检查数据库参数文件是否存在并正确配置。

可以使用命令`sqlplus / as sysdba`连接到数据库实例,然后使用命令`show parameter spfile`来查看参数文件的路径和名称。

- 检查数据库实例的日志文件,查找相关错误信息,并根据错误信息采取相应的措施。

2. 数据库性能下降故障现象:数据库执行查询或者事务的速度变慢,系统响应时间延迟。

解决方案:- 检查数据库的硬件资源使用情况,如CPU、内存和磁盘空间。

可以使用命令`top`或者`vmstat`来查看系统资源的使用情况,确保资源没有被耗尽。

- 检查数据库的索引是否正确创建和维护。

可以使用`explain plan`命令来分析查询语句的执行计划,确保查询使用了正确的索引。

- 检查数据库的统计信息是否最新。

可以使用命令`analyze table`或者`dbms_stats.gather_table_stats`来采集表的统计信息,以便优化查询计划。

3. 数据库备份恢复失败故障现象:尝试恢复数据库备份时,系统提示错误,无法成功恢复数据。

解决方案:- 检查备份文件的完整性和可用性。

可以使用命令`restore validate`来验证备份文件的有效性。

- 检查数据库的恢复目标是否正确配置。

可以使用命令`show parameterdb_recovery_file_dest`来查看恢复目标的路径和名称。

oracle-00031原理

oracle-00031原理

Oracle是世界上领先的企业级数据库管理系统,被广泛应用于企业的信息管理和数据处理中。

其中,Oracle-00031错误是一个常见的数据库错误,本文将深入探讨Oracle-00031错误的产生原理及解决方法。

一、Oracle-00031错误的产生原因1.1 表空间不足Oracle数据库中的表空间是用来存储表和索引数据的逻辑结构,如果表空间不足,数据库就无法正常存储数据,从而导致Oracle-00031错误的产生。

1.2 数据库连接失败当数据库连接失败时,用户无法正常访问数据库中的数据,这也可能导致Oracle-00031错误的出现。

1.3 数据文件损坏数据文件是Oracle数据库中用来存储实际数据的物理文件,如果数据文件损坏或丢失,数据库将无法正常读取数据,从而引发Oracle-00031错误。

1.4 日志文件满数据库的日志文件用来记录数据库的操作日志,当日志文件满时,数据库就无法继续记录新的操作日志,从而导致Oracle-00031错误的产生。

二、解决Oracle-00031错误的方法2.1 扩充表空间当出现表空间不足的情况时,可以通过扩充表空间的方式解决这一问题。

可以通过 ALTER TABLESPACE 命令来扩充表空间的大小,使其能够满足数据库存储数据的需求。

2.2 修复数据文件如果数据文件损坏或丢失,可以通过使用 RMAN 或者恢复数据库备份文件的方式来修复数据文件,保障数据库的正常运行。

2.3 清理日志文件当日志文件满时,可以通过定期清理日志文件的方式来避免日志文件满的情况发生。

可以通过设置自动日志文件清理策略,定期清理过期日志文件,保证数据库的正常运行。

2.4 重新连接数据库当数据库连接失败时,可以尝试重新连接数据库,或者检查网络连接,确保数据库可以正常访问。

三、结论通过以上分析可以看出,Oracle-00031错误通常是由于表空间不足、数据库连接失败、数据文件损坏、日志文件满等原因引起的。

Oracle数据库十大常见性能问题

Oracle数据库十大常见性能问题

Oracle数据库⼗⼤常见性能问题
1. 错误的连接管理
oracle的连接是耗时耗⼒的操作,不应像sqlserver那样使⽤连接
2. 错误的使⽤游标和共享池
⼀般是没有使⽤绑定变量
3. 不好的SQL语句
使⽤⼤量资源的SQL语句都应该好好检查是否可以优化
4. 使⽤⾮标准的初始化参数
设置尽量少的参数,绝⼤部分让它保持默认值
5. 数据库I/O错误
很多数据库放置在可⽤性很差的磁盘上,还有很多数据库的指定的磁盘不正确,这样只是配置了磁盘空间⽽没有考虑I/O带宽。

6. 在线重做⽇志设置问题
⼀般存在⽇⼦⽂件组太少,⽂件太⼩问题,导致归档跟不上。

7. 数据块竞争问题
由于缺少 free lists, free list groups, transaction slots (INITRANS), 和rollback segments导致的数据块竞争问题,使⽤段空间⾃动管理和⾃动还原表空间管理。

8. 长时全表扫描
经常发⽣⼤的全表扫描意味着事务设计差,缺失索引,差的sql优化计划
9. ⼤量的SYS⽤户递归SQL语句
⼀般是空间管理活动,如分配区,使⽤本地管理表空间解决此问题。

如果是其他⽤户出现此问题,⼀般是差的SQL或者PL/SQL造成的。

10. 部署和迁移错误
由于迁移导致的统计信息或者索引缺失。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案ORACLE数据库故障解决方案一、背景介绍ORACLE数据库是一种常用的关系型数据库管理系统,广泛应用于企业级应用系统中。

然而,由于各种原因,数据库可能会出现故障,导致系统无法正常运行。

为了保证系统的稳定性和可靠性,需要及时解决数据库故障。

二、故障分类1. 数据库无法启动:当数据库无法启动时,可能是由于数据库实例崩溃、数据库文件损坏等原因导致。

2. 数据库连接问题:当无法连接到数据库时,可能是由于网络故障、数据库监听程序故障等原因导致。

3. 数据库性能问题:当数据库性能下降时,可能是由于缓冲区不足、SQL语句优化不当等原因导致。

4. 数据库备份恢复问题:当需要恢复数据库时,可能是由于误删除数据、数据库文件损坏等原因导致。

三、解决方案1. 数据库无法启动解决方案:a. 检查数据库实例是否崩溃,可以通过查看数据库错误日志来确认。

b. 检查数据库文件是否损坏,可以使用ORACLE提供的工具进行检查和修复。

c. 如果数据库实例崩溃,可以尝试重启数据库实例或者重建数据库实例。

2. 数据库连接问题解决方案:a. 检查网络是否正常,可以使用PING命令检查网络连通性。

b. 检查数据库监听程序是否正常运行,可以使用LSNRCTL命令进行检查和管理。

c. 如果数据库监听程序故障,可以尝试重启监听程序或者重新配置监听程序。

3. 数据库性能问题解决方案:a. 检查数据库缓冲区是否足够,可以通过查看数据库缓冲区命中率来判断。

b. 检查SQL语句是否优化,可以使用ORACLE提供的工具进行SQL调优。

c. 如果数据库性能下降,可以尝试增加数据库缓冲区大小或者重新设计数据库结构。

4. 数据库备份恢复问题解决方案:a. 检查数据库备份是否可用,可以通过恢复测试来确认备份文件是否完整。

b. 检查数据库文件是否损坏,可以使用ORACLE提供的工具进行文件恢复。

c. 如果数据库文件损坏,可以尝试从备份文件中恢复数据或者重新创建数据库。

oracle的毛病一

oracle的毛病一

oracle的毛病一本文纯为牢骚, 怨言。

一为笔者对ORACLE软件如此这般的疑惑与不满,二来其实可以总结ORACLE中的一些不规则性, 为ORACLE学习者提一些借鉴..1. 改变当前用户时SQLLUS环境变量的设置是否被继承到新的用户环境下混乱, serverout 没有被继承, 而agesize被继承.2. SQLLUS环境下命令行功能微弱得可怜, 看看readline, 看看MySQL3. SQLLUS环境的命令行没有历史记录功能, 看看MySQL. gdb, bash4. 命名规范混乱得一踏糊涂. user_tab_columns, user_con_constraintsuser_tables, usre_cons_columns5. SQLLUS环境的初始化文件的location的要求, 看看.bashrc, .vimrc, .netrc.emacs, .newsrc...摸一个都比它强, 我要使用你的login.sql还非得在每一个当前目录下都弄一份, 随身携带呀? 好在这一点可以通过SQLATH环境变量的设置来搞定.6. 注释格式:--, 什么玩意呀, HTML用, erl用#, h用#或/**/或//, C用/**/, C++用/**/和//, lis用;;, 汇编用;, QBASIC用rem 和&#39;,SHELL,SED,AWK用#, 你干吗要自创一种. 自以为很鸟啊, 与别人兼容一点会小你什么身份.7. 看看它的L/SQL, 号称第N代的高级语言, function因为必需返回一个值而存在, 除此之外我看不出它与其它的rocedure有什么区别. 又是trigger,又是ackage, 又是rocedure, 又是function, 搞什么东东呀. 别人是把复杂的东西简单化, 我看ORACLE是要把简单的东西复杂化, 同样是L/SQL程序, dbms_outut.ut_line被设计成在function里单独调用时不能输出.非要一个rocedure单独调用它时它才会输出.8. 单引号问题, Javascrit可以兼容使用单双引号, erl可以, h也可以, 它们可以是因为它们想兼容, 想对用户友好, C语言不允许, 那是因为它严谨.人家留着有大用场. 你ORACLE不允许使用双引号又是什么原由, 说来听听.9. 别人的用户界面设计是&quot;没有消息就是最好的消息&quot;, 或是&quot;无论发生什么, 都要让用户知道&quot;, 看看它在sqllus下的变量:var i number;i:=5;rint i;你什么看见什么, 什么都没有! 你又能从这知道什么, 好消息?S:我至今都不知道这说明了什么? i的值为NULL?, i不能在这下面赋值?不能赋值你说呀, 你不说我怎么知道不能赋值, 虽然你很能有意见地显示了一个空行, 但是你还是要说呀, 你真的不能赋值吗? 你不是真的不能赋值吧?...后记: 好在我今天知道了要用SQL&gt; exec :i := 5;SQL&gt; rint :i但总不能让我掘地三尺才找得出来这些浅显的东西吧.10. 在sqllus下hel set看看, 找出一个叫set severout[ut] on|off 的选项注意, 它是severout, 你在sqllus下set severout on试试,S2-0158: unknown SET otion &quot;severout&quot; 了吧?set serverout on是的, 就一个字母而已.编程大师说: 任何软件都有BUG.但, 一个如此小的BUG可以让一个全球第二大的软件公司带着它走过几个版本?Oracle8.15 Oracle8.16 Oracle8.17...难道保留错误是为了兼容性?11. L/SQL的用户们, 看看下面:创建一个没带参数的rocedure:create or relace rocedure roc_name asi number;begin...end roc_name;创建一个带参数的rocedure:create or relace rocedure roc_name(arg1,...) asi number;begin...end roc_name;你很习惯用declare来声明吗? 不行, 这里不行, 你必需听我的, 用as创建一个触发器:create or relace trigger tri_name before insert on tname for eachrowdeclarei number;begin..end;因为这是触发器, 所以它要用declare来声明变量, 尽管触发器用的也是L/SQL的语法. 但我们是为了区别于其它类型的存储过程, 为了让用户觉得ORACLE高深莫测一点.怎么就一个end;不是end tri_name吗? 是的, rocedure和function是这样设计的, 但这样可以让用户觉得更难用一点么!(sqllus下)你调用一个不带参数的rocedure:call roc_name();(sqllus下)你调用一个不带参数的rocedure:call roc_name(arg1, arg2);是的, 它不是可选的, 它必需如此, 定义一个没有参数的rocedure就是不要空的()号, 但调用它的时侯就是要, 定义一个有参数的rocedure当然也要.function的情况与这个也一样.你调用一个function:ret_val := func_name();什么? 你不需要ret_val, 不行, 这是强买强卖, 不要不行. 否则我不干活!而且, 哼哼, 我给出的错误信息保证你看不懂.你要玩更高级的设计方法, 用上包了:create or relace ackage ack_name as....end ack_name;是的, 这只是包的声明.要想定义这个包, 你还得:create or relace ackage body ack_name asrocedure roc_name is--你不是说用as吗? 是的, 但是这里as已经被上一条语句用了, 呶! 你也看到了. 用is有什么不好?end roc_namefunction func_name is...end func_nameend ack_name;12. 看看出错信息, 来自SQLLUS的, 来自ro*C预编译器的, 来自其它工具如im, ex, sqllda的. 说不准你也别误导呀.13. 疲惫不堪的ro*C程序员们:在函数foo中你已经声明了EXEC SQL WHENEVER SQLERROR GOTO sql_err;在另一个函数bar里你只想默默地使用EXEC SQL WHENEVER SQLERROR CONTINUE;但你没特别声明, ro*C的预编译器会告诉你, 它在函数bar 中找不到sql_err标号!!! 它可以跨函数使用标号. 它也敢自称是一个预处理器跟编译器沾沾边, 刚才用陈桥五笔敲出来的处理器三个字恰好跟处理品是同样的键码, 我看叫处理品倒是名符其实.14. DDL语句的用户们:alter table tname add(col1 tye...);alter table tname modify(col1 tye...);alter table tname dro column(col1);为何非要在dro里多出来一个column?15. 命名user_cons_columns;user_constraints;user_rollback_segs;它真的要把segment统统缩写为segs吗? 把constraints缩写为cons? 把columns缩写为cols? 不, ORACLE的程序员们想怎么样就怎么样. 他们是觉得单词的全称太长了吗? 不见得, desc dba_users;看一下看看INITIAL_RSRC_CONSUMER_GROU字段, 看看temorary_tablesace字段.再来看看一下create table:create table tname (col1 tye,...) storage(initial .. next ..minextents .. maxextents ..) ...;desc user_tables;inital_extentnext_extentminextentsmaxextents不要问他们为什么有的用单数有的用复数, 因为他们是ORACLE. 他们想这样.dba_tables中ownerdba_sequences中叫sequence_owneruser_tab_columns是关于一张表中列信息的, _tab_columnsuser_cons_columns是关于表中字段的约束信息的, _cons_columns后记: 我终于看到Oracle9i版里对此有了改进, 略感欣慰.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
alter table tname drop column(col1);
为何非要在drop里多出来一个column?
15. 命名
user_cons_columns;
user_constraints;
user_rollback_segs;
非要一个procedure单独调用它时它才会输出.
8. 单引号问题, Javascript可以兼容使用单双引号, perl可以, php也可以, 它们可以是因为它们想兼容, 想对用户友好, C语言不允许, 那是因为它严谨.
人家留着有大用场. 你ORACLE不允许使用双引号又是什么原由, 说来听听.
7. 看看它的PL/SQL, 号称第N代的高级语言, function因为必需返回一个值而存在, 除此之外我看不出它与其它的procedure有什么区别. 又是trigger,
又是package, 又是procedure, 又是function, 搞什么东东呀. 别人是把复杂的东西简单化, 我看ORACLE是要把简单的东西复杂化, 同样是PL/SQL程序, dbms_output.put_line被设计成在function里单独调用时不能输出.
inital_extent
next_extent
minextents
maxextents
不要问他们为什么有的用单数有的用复数, 因为他们是ORACLE. 他们想这样.
dba_tables中owner
dba_sequences中叫sequence_owner
10. 在sqlplus下help set看看, 找出一个叫set severout[put] on|off的选项
注意, 它是severout, 你在sqlplus下set severout on试试,
SP2-0158: unknown SET option "severout" 了吧?
6. 注释格式:--, 什么玩意呀, HTML用, perl用#, php用#或/**/或
//, C用/**/, C++用/**/和//, lisp用;;, 汇编用;, QBASIC用rem 和',
SHELL,SED,AWK用#, 你干吗要自创一种. 自以为很鸟啊, 与别人兼容一点会小你什么身份.
本文纯为牢骚, 怨言。一为笔者对ORACLE软件如此这般的疑惑与不满,
二来其实可以总结ORACLE中的一些不规则性, 为ORACLE学习者提供一些借鉴..
1. 改变当前用户时SQLPLUS环境变量的设置是否被继承到新的用户环境下混乱, serverout 没有被继承, 而pagesize被继承.
创建一个触发器:
create or replace trigger tri_name before insert on tname for each
row
declare
i number;
begin
..
end;
因为这是触发器, 所以它要用declare来声明变量, 尽管触发器用的也是PL/
不能赋值你说呀, 你不说我怎么知道不能赋值, 虽然你很能有意见地显示了一个空行, 但是你还是要说呀, 你真的不能赋值吗? 你不是真的不能赋值吧?
...
后记: 好在我今天知道了要用
SQL> exec :i := 5;
SQL> print :i
但总不能让我掘地三尺才找得出来这些浅显的东西吧.
它真的要把segment统统缩写为segs吗? 把constraints缩写为cons? 把
columns缩写为cols? 不, ORACLE的程序员们想怎么样就怎么样. 他们是觉得
单词的全称太长了吗? 不见得, desc dba_users;看一下
看看INITIAL_RSRC_CONSUMER_GROUP字段, 看看temporary_tablespace字段.
9. 别人的用户界面设计是"没有消息就是最好的消息", 或是"无论发生什么, 都要让用户知道", 看看它在sqlplus下的变量:
var i number;
i:=5;
print i;
你什么看见什么, 什么都没有! 你又能从这知道什么, 好消息?
PS:我至今都不知道这说明了什么? i的值为NULL?, i不能在这下面赋值?
在另一个函数bar里你只想默默地使用
EXEC SQL WHENEVER SQLERROR CONTINUE;
但你没特别声明, Pro*C的预编译器会告诉你, 它在函数bar中找不到sql_err
标号!!! 它可以跨函数使用标号. 它也敢自称是一个预处理器跟编译器沾沾
call proc_name();
(sqlplus下)你调用一个不带参数的procedure:
call proc_name(arg1, arg2);
是的, 它不是可选的, 它必需如此, 定义一个没有参数的procedure就是不
要空的()号, 但调用它的时侯就是要, 定义一个有参数的procedure当然也要.
再来看看一下create table:
create table tname (col1 type,...) storage(initial .. next ..
minextents .. maxextents ..) ...;
desc user_tables;
边, 刚才用陈桥五笔敲出来的处理器三个字恰好跟处理品是同样的键码, 我看
叫处理品倒是名符其实.
14. DDL语句的用户们:
alter table tname add(col1 type...);
alter table tname modify(col1 type...);
SQL的语法. 但我们是为了区别于其它类型的存储过程, 为了让用户觉得
ORACLE高深莫测一点.
怎么就一个end;不是end tri_name吗? 是的, procedure和function是这样
设计的, 但这样可以让用户觉得更难用一点么!
(sqlplus下)你调用一个不带参数的procedure:
set serverout on
是的, 就一个字母而已.
编程大师说: 任何软件都有BUG.
但, 一个如此小的BUG可以让一个全球第二大的软件公司带着它走过几个版本?
Oracle8.15 Oracle8.16 Oracle8.17...难道保留错误是为了兼容性?
2. SQLPLUS环境下命令行编辑功能微弱得可怜, 看看readline, 看看MySQL
3. SQLPLUS环境的命令行没有历史记录功能, 看看MySQL. gdb, bash
4. 命名规范混乱得一踏糊涂. user_tab_columns, user_con_constraints
创建一个带参数的procedure:
create or replace procedure proc_name(arg1,...) as
i number;
begin
...
end proc_name;
你很习惯用declare来声明吗? 不行, 这里不行, 你必需听我的, 用as
11. PL/SQL的用户们, 看看下面:
创建一个没带参数的procedure:
create or replace procedure proc_name as
i number;
begin
...
end proc_name;
你要玩更高级的设计方法, 用上包了:
create or replace package pack_name as
....
end pack_name;
是的, 这只是包的声明.
要想定义这个包, 你还得:
create or replace package body pack_name as
procedure proc_name is
--你不是说用as吗? 是的, 但是这里as已经被上一条语句用了, 呶! 你
也看到了. 用is有什么不好?
end proc_name
function func_name is
...
end func_name
user_tables, usre_cons_columns
5. SQLPLUS环境的初始化文件的location的要求, 看看.bashrc, .vimrc, .netrc
.emacs, .newsrc...摸一个都比它强, 我要使用你的login.sql还非得在每一个当前目录下都弄一份, 随身携带呀? 好在这一点可以通过SQLPATH环境变量的设置来搞定.
user_tab_columns是关于一张表中列信息的, _tab_columns
user_cons_columns是关于表中字段的约束信息的, _cons_columns
后记: 我终于看到Oracle9i版里对此有了改进, 略感欣慰.
end paQLPLUS的, 来自Pro*C预编译器的, 来自其它工具如
imp, exp, sqllda的. 说不准你也别误导呀.
13. 疲惫不堪的Pro*C程序员们:
在函数foo中你已经声明了
EXEC SQL WHENEVER SQLERROR GOTO sql_err;
function的情况与这个也一样.
你调用一个function:
ret_val := func_name();
什么? 你不需要ret_val, 不行, 这是强买强卖, 不要不行. 否则我不干活!
相关文档
最新文档