Linux链接oracle数据库启动——操作步骤

一、在Linux下启动Oracle

1.登录到Linux服务器,切换到oracle用户权限(命令是:# su –l oracle)

[oracle@localhost ~]$ sqlplus / as sysdba --进入sqlplus界面

2.进入sqlplus界面(命令是:$ sqlplus /nolog 或 sqlplus / as sysdba)

原本的画面会变为

SQL>

接着请输入

SQL>conn / as sysdba ;

输入

SQL> startup --(作用:启动数据库实例)

另外停止数据库的指令如下:

SQL> shutdown immediate

 

[oracle@localhost ~]$ sqlplus / as sysdba --进入sqlplus界面

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 17 10:48:08 2022

Copyright © 1982, 2009, Oracle. All rights reserved.

Connected to an idle instance.

SQL> quit
Disconnected
[oracle@localhost ~]$ sqlplus /nolog --进入sqlplus界面

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 17 10:48:42 2022
Copyright © 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba --sysdba登录
Connected to an idle instance.
SQL> startup --启动数据库实例
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> shutdown immediate --关闭数据库实例

Database closed.
Database dismounted.

ORACLE instance shut down.
SQL>quit --退出


二、检查Oracle 数据库是否启动

回到终端机模式,输入:ps -ef|grep ora_ (作用是:查看是否有Oracle的进程,如果有,大多数情况说明启动了。)

[oracle@localhost ~]$ ps -ef|grep ora_
oracle 12193 1 0 11:00 ? 00:00:00 ora_pmon_orcl
oracle 12195 1 0 11:00 ? 00:00:00 ora_vktm_orcl
oracle 12199 1 0 11:00 ? 00:00:00 ora_gen0_orcl
oracle 12201 1 0 11:00 ? 00:00:00 ora_diag_orcl
oracle 12203 1 0 11:00 ? 00:00:00 ora_dbrm_orcl
oracle 12205 1 0 11:00 ? 00:00:00 ora_psp0_orcl
oracle 12207 1 0 11:00 ? 00:00:00 ora_dia0_orcl
oracle 12209 1 0 11:00 ? 00:00:00 ora_mman_orcl
oracle 12211 1 0 11:00 ? 00:00:00 ora_dbw0_orcl
oracle 12213 1 0 11:00 ? 00:00:00 ora_lgwr_orcl
oracle 12215 1 0 11:00 ? 00:00:00 ora_ckpt_orcl
oracle 12217 1 0 11:00 ? 00:00:00 ora_smon_orcl
oracle 12219 1 0 11:00 ? 00:00:00 ora_reco_orcl
oracle 12221 1 0 11:00 ? 00:00:00 ora_mmon_orcl
oracle 12223 1 0 11:00 ? 00:00:00 ora_mmnl_orcl
oracle 12225 1 0 11:00 ? 00:00:00 ora_d000_orcl
oracle 12227 1 0 11:00 ? 00:00:00 ora_s000_orcl
oracle 12239 1 0 11:00 ? 00:00:00 ora_qmnc_orcl
oracle 12257 1 0 11:00 ? 00:00:00 ora_cjq0_orcl
oracle 12277 1 0 11:00 ? 00:00:00 ora_q000_orcl
oracle 12279 1 0 11:00 ? 00:00:00 ora_q001_orcl
oracle 12389 10058 0 11:01 pts/0 00:00:00 grep --color=auto ora_
[oracle@localhost ~]$

三、检查Oracle DB监听器是否正常

输入:$ lsnrctl status (作用是:检查监听是否启动。) 以下为没有启动。

[oracle@localhost ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-MAR-2022 11:03:33

Copyright © 1991, 2009, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
[oracle@localhost ~]$ ^C
[oracle@localhost ~]$

如果没有启动,可以输入:$ lsnrctl start (作用是:启动监听器)

[oracle@localhost ~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-MAR-2022 11:04:48

Copyright © 1991, 2009, Oracle. All rights reserved.

Starting /data/oracle/product/11.2.0/bin/tnslsnr: please wait…

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /data/oracle/product/11.2.0/network/admin/listener.ora
Log messages written to /data/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 17-MAR-2022 11:04:48
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /data/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File /data/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@localhost ~]$


另外停止监听的指令如下:

$ lsnrctl stop

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle Database 11g初学者指南》能使读者快捷地掌握Oracle Database 11g的基础知识。通过自我评估教程,介绍了核心数据库技术、管理员职责、高可用性以及大型数据库特性。《Oracle Database 11g初学者指南》带领读者循序渐进地学习数据库设置、管理、编程、备份和恢复。还深入介绍了SQL和PL/SQL。为了易于学习,这本独特的Oracle Press指南是这样组织的: 核心概念——Oracle Database 11g主题呈现在按逻辑组织的章节中 主要内容——每章要介绍的具体内容列表 实践练习——演示如何应用在每章学到的关键技术 学习效果测试——对学习效果的快速自我评估 注意——与所介绍主题相关的额外信息 章节测验——每章结束时的测验测试读者对所学知识的掌握程度。 目录 第1章 数据库基础 1.1 数据库定义 1.2 Ofacle Database 11g的体系结构 1.2.1 控制文件 1.2.2 联机重做日志 1.2.3 System表空间 1.2.4 Sysaux表空间 1.2.5 默认的临时表空间 1.2.6 Undo表空间 1.2.7 服务器参数文件 1.2.8 后台进程 1.2.9 数据库管理员 1.3 Oracle Database 11g的基本数据类型 1.3.1 varchar2 1.3.2 数字 1.3.3 日期 1.3.4 时间戳 1.3.5 clob 1.3.6 blob 1.4 表 1.5 存储对象 1.5.1 视图 1.5.2 触发器 1.5.3 过程 1.5.4 函数 1.5.5 包 1.6 Oracle Database 11g的其他重要内容 1.6.1 索引 1.6.2 用户 1.6.3 表空间配额 1.6.4 同义词 1.6.5 角色 1.6.6 默认用户环境 1.7 对象和系统权限 1.7.1 select 1.7.2 insen 1.7.3 update 1.7.4 delete 1.7.5 系统权限 1.8 网格 1.9 综述 1.10 本章测验 第2章 Oracle安装 2.1 安装研究和安装计划 2.1.1 确定系统需求 2.1.2 Linux安装 2.2 操作系统设置 2.3 Linux简介 2.4 选择安装组件 2.5 安装Oracle软件 2.5.1 数据库配置助手 2.5.2 验证安装 2.6 综述 2.7 本章测验 第3章 OFacle网络连接 3.1 使用Omcle Net Services 3.1.1 网络协议 3.1.2 优化网络带宽 3.1.3 连接 3.1.4 保持连接 3.1.5 定义一个位置 3.2 专用和共享服务器体系结构之间的差别 3.2.1 专用服务器 3.2.2 共享服务器 3.2.3 设置分派进程 3.2.4 监视共享服务器的视图 3.3 定义连接 3.3.1 连接描述符 3.3.2 定义连接描述符 3.3.3 Oracle连接管理器 3.3.4 会话多路复用 3.3.5 防火墙访问控制 3.4 使用Oracle Net Listener 3.4.1 密码验证 3.4.2 多个监听进程 3.4.3 连接池 3.5 命名方法 3.5.1 目录命名方法 3.5.2 目录信息树 3.5.3 标识名 3.5.4 如何查找目录命名信息 3.5.5 网络服务别名条目 3.5.6 本地命名方法 3.5.7 简单命名方法 3.5.8 外部命名方法 3.5.9 使用哪种命名方法 3.6 使用Oracle配置文件 3.7 使用管理工具 3.7.1 OEM/网格控件 3.7.2 Oracle网络管理器 3.7.3 OEM控制台 3.7.4 OEM组件 3.7.5 Oracle网络配置助手 3.7.6 Oracle网络目录配置助手 3.7.7 命令行实用程序 3.7.8 Oracle高级安全选项 3.7.9 分派进程 3.8 使用配置文件 3.9 多层环境中的网络 3.10 安装Oracle 11g客户端软件 3.11 本章测验 第4章 SQL:结构化查询语言 4.1 SOL语句的组成 4.1.1 DDL 4.1.2 DML 4.2 基本的insert和select语句 4.2.1 insert 4.2.2 select 4.3 简单的where子句 4.3.1 带and/or的where子句 4.3.2 带NOT的where子句 4.3.3 带搜索范围的where子句 4.3.4 带搜索列表的where子句 4.3.5 带模式搜索的where子句 4.3.6 where子句中的常用操作符 4.4 基本的update和delete语句 4.4.1 update语句 4.4.2 delete语句 4.5 数据排序 4.6 函数:字符串函数、数字函数和聚集函数(不是分组) 4.6.1 字符串函数 4.6.2 数字函数 4.6.3 聚集函数 4.7 日期函数(格式化的和按时间排列的) 4.7.1 日期函数 4.7.2 特殊格式的日期数据类型 4.7.3 嵌套函数 4.8 连接(ANSI与Oracle对比):内连接、外连接、自连接 4.8.1 内连接 4.8.2 外连接 4.8.3 自连接 4.9 groupby和having子句 4.9.1 groupby 4.9.2 having 4.10 子查询:简单子查询和带连接的相关比较 4.10.1 简单子查询 4.10.2 带连接的相关子查询 4.11 集合操作符:union、intersect和minus 4.11.1 union 4.11.2 union all 4.11.3 intersect 4.11.4 minus 4.12 视图 4.13 序列 4.14 约束:与实体模型的联系、类型、延迟 4.14.1 与实体模型的联系 4.14.2 类型 4.14.3 延迟 4.15 用SQL*Plus进行格式化输出 4.15.1 页和行大小 4.15.2 页标题 4.15.3 页脚 4.15.4 格式化列 4.15.5 将SQL*Plus输出结果写入文件 4.16 本章 测验 第5章 PL/SQL 5.1 PL/SQL定义和使用PL/SQL的原因 5.2 基本PL/SQL编程结构 5.3 定义PL/SQL数据类型 5.3.1 有效字符集 5.3.2 算术操作符 5.3.3 varchar2类型 5.3.4 数字类型 5.3.5 日期类型 5.3.6 布尔类型 5.4 在SQL*Plus中编写PL/SQL程序, 5.4.1 PL/SQL程序中的SQL 5.4.2 PL/SQL游标 5.4.3 游标For循环 5.5 PL/SQL中的异常处理 5.6 程序中的控制结构 5.6.1 程序控制 5.6.2 IF逻辑结构 5.6.3 CASE语句 5.6.4 Loop循环 5.6.5 WHILE循环 5.6.6 FOR循环 5.7 如何创建存储过程以及创建存储过程的原因 5.8 函数的创建和使用 5.9 调用PL/SQL程序 5.10 本章 测验 第6章 数据库管理员 6.1 了解DBA的工作 6.2 执行日常操作 6.2.1 体系结构和设计 6.2.2 容量规划 6.2.3 备份和恢复 6.2.4 安全 6.2.5 性能和调整 6.2.6 管理数据库对象 6.2.7 存储管理 6.2.8 变化管理 6.2.9 任务调度 6.2.1 0网络管理 6.2.1 1故障排查 6.3 OracleDatabase11g的基础结构 6.3.1 模式 6.3.2 存储结构 6.4 OracleDatabase11g的操作模式 6.4.1 操作模式 6.4.2 数据库和实例关闭 6.5 0EM使用初步 6.5.1 实例配置 6.5.2 用户会话 6.5.3 资源消费者组 6.5.4 模式、安全和存储管理 6.5.5 分布式管理 6.5.6 数据仓库特征 6.5.7 其他工具 6.6 数据库对象管理 6.6.1 控制文件 6.6.2 重做日志 6.6.3 撤消管理 6.6.4 模式对象 6.7 空间管理 6.7.1 归档日志 6.7.2 表空间和数据文件 6.8 用户管理 6.8.1 创建用户 6.8.2 编辑用户 6.9 数据库用户权限管理 6.9.1 授权 6.9.2 角色 6.9.3 配置文件 6.9.4 综述 6.10 本章 测验 第7章 备份与恢复 7.1 Oracle备份和恢复基本原理 7.1.1 从何处着手 7.1.2 备份的体系结构 7.1.3 Oracle二进制文件 7.1.4 参数文件 7.1.5 控制文件 7.1.6 重做日志 7.1.7 撤消段 7.1.8 检查点 7.1.9 归档日志 7.1.10 数据文件、表空间、段、分区和块 7.1.11 转储文件 7.2 0racle用户管理的备份和恢复 7.2.1 用户管理的备份类型 7.2.2 冷备份 7.2.3 热备份 7.2.4 从冷备份中恢复 7.2.5 从热备份中恢复 7.2.6 恢复的7个步骤 7.2.7 用备份控制文件进行恢复 7.3 编写数据库备份脚本 7.4 备份归档重做日志 7.5 Oracle Data Pump简介 …… 第8章 高可用性:RAC、ASM和Data Guand 第9章 大型数据库特性 附录 各章测验答案
不小心Truncate表的事情也是有的, 其中大部份时因为工具连错了库, 从儿跑错了角本. 遇到这种事情而没有备份时怎么办呢? 首先要停止数据库, 将这个表所在的表空间的文件拷贝出来, 因为Oracle在Truncate只时将相应Segment的第一个块格式化掉了, 而后面的都还存在, 到下次用时到才真正地重新格式化. 下面来讲一个Truncate表后进行恢复的例子: SQL> CREATE TABLE T_TRUNCATE AS SELECT * FROM TAB; Table created. SQL> SELECT COUNT(*) FROM T_TRUNCATE; COUNT(*) ---------- 14 SQL> ALTER SYSTEM CHECKPOINT; System altered. SQL> TRUNCATE TABLE T_TRUNCATE; Table truncated. SQL> ALTER SYSTEM CHECKPOINT; System altered. 在Truncate时只是Segment Header格式化了, 并将Data Object ID换成一个新的值, 我们可以在AUL中用DESC命令来查看: AUL> desc anysql.t_truncate Storage(OBJ#=9976 OBJD=9977 TS=4 FILE=4 BLOCK=5235 CLUSTER=0) No. SEQ INT Column Name Type --- --- --- ----------------------------- ---------------- 1 1 1 TNAME VARCHAR2(30) NOT NULL 2 2 2 TABTYPE VARCHAR2(7) 3 3 3 CLUSTERID NUMBER 要恢复这个表的数据, 首先要在AUL中运行SCAN EXTENT命令, 因为Segment Header被格式化了, 所以Extent Map也可能丢失, 而Scan Extent则将扫描整个数据文件并将Extent分配信息写入AULEXT.TXT文件: AUL> SCAN EXTENT FILE 4 2006-12-18 21:32:10 2006-12-18 21:32:24 恢复的关键是要获得这个表原来的Data Object ID, 在这个例子中我在Truncate表后什么也没有做就关闭数据库进行恢复了. 从上面的DESC命令可以看出表的Segment Header是(4,5235), 而新的Data Object ID是9977, 老的Data Object ID我们可以从Segment Header的后面一个数据块中得到, 如果这个表有几个Free List Group, 则可能还要再后面几个块. 用AUL的ORADUMP命令来看一下后面一个块: AUL> ORADUMP FILE 4 BLOCK 5236 RDBA=0x01001474(4/5236)=16782452,type=0x06,fmt=0xa2,seq=0x02,flag=0x04 seg/obj=0x000026f8=9976,csc=0x0000.0006caf5,itc=3,typ=1 - DATA FLG=0x32, fls=0, nxt=0x01001471(4/5233)=16782449 ...... 可以看到原来的Data Object ID是9976, 现在可以恢复了, 先不指定原来的Data Object ID试试? AUL> unload table anysql.t_truncate; 2006-12-18 21:33:37 Unload OBJD=9977 FILE=4 BLOCK=5235 CLUSTER=0 ... 2006-12-18 21:33:37 接下来指定原来的Data Object ID, 再试试? AUL> unload table anysql.t_truncate object 9976; 2006-12-18 21:33:45 Unload OBJD=9976 FILE=4 BLOCK=5235 CLUSTER=0 ... P_MV_FACT_SALES|TABLE TIME_DIM|TABLE FACT_SALES|TABLE MV_FACT_SALES|TABLE SEG$|TABLE NUMTEST|TABLE T_OBJECTS|TABLE T_LOBTEST|TABLE T_INCLOB|TABLE CF_XXK|TABLE T_TESTDMP|TABLE T_CLOBDEMO|TABLE T_BLOBDEMO|TABLE T_TRUNCATE|TABLE 2006-12-18 21:33:45 可以看到14条数据全回来了, 当然数据库是复杂的, 如果是一个很大的表, 还是不能保证可以100%恢复的. 最近至少看到二次错误地截断(Truncate)表的例子, 并在网上询问如何恢复, 在这儿我给出AUL/MyDUL的解决方案, 下面是我用的一个测试表: ASQL> DESC TRUNCDEMO NO# NAME NULLABLE TYPE --- ----------------- -------- ------------ 1 COL1 VARCHAR2(20) ASQL> SELECT * FROM TRUNCDEMO; COL1 ----- ROW 1 ROW 2 2 rows returned. 接下来我们来截断表, 其实这个操作只是重新格式化了段头块(Segment Header), 并分配一个新的数据对象号(Data Object ID), 当然空间分配信息也改了, 除非加了重用空间选项(Reuse Storage). 来看一下这个操作的前后变化: ASQL> SELECT DATA_OBJECT_ID, OBJECT_NAME FROM USER_OBJECTS; DATA_OBJECT_ID OBJECT_NAME -------------- ----------- 13676 TRUNCDEMO 1 rows returned. ASQL> truncate table truncdemo; Truncate Table Succeed. ASQL> SELECT DATA_OBJECT_ID, OBJECT_NAME FROM USER_OBJECTS; DATA_OBJECT_ID OBJECT_NAME -------------- ----------- 13677 TRUNCDEMO 1 rows returned. 由于在System表空间中已经记录了新的信息, 因此用当前的System信息是不能恢复过来的,在AUL/MyDUL中可以当作没有System时的情况来处理,在下面的命令中, 我们用Truncate后的数据对象号就不能进行恢复, 而使用Truncate以前的就可以, 当然空间不能被重新利用了是恢复的前提. AUL> unload object 13676 column varchar file 4; 2006-09-18 22:38:58 ROW 1 ROW 2 2006-09-18 22:39:04 AUL> unload object 13677 column varchar file 4; 2006-09-18 22:39:10 2006-09-18 22:39:10 AUL> 因此在意外发生Truncate后, 如果没有备份可以恢复, 首先要做的事是备份一下当前的文件, 免得空间被重用. 而Truncate之前的数据对象号在AUL/MyDUL中是很容易找出来的. 到此已经说明了如何恢复Truncate表了. 跟据原理可以创建一个恢复包Recover_Truncate_Data,然后我们可以做个实验进行验证恢复效果如何: 第一步:创建表 create table truntab1 as select * from dba_objects; 第二步:查询表中记录数 select count(*) from truntab1; --72622 第三步:truncate表中业务数据 truncate table truntab1; 第四步:确认表中记录数为零 select count(*) from truntab1; -- 0 第五步:设置恢复前环境变量 set serveroutput on size 10000000 --//设置大点,默认为2000 bytes exec dbms_output.enable(999999999999999999999); --//默认为2000 bytes 注意:如果不不进行设置,为报PLSQL ORA-20000: ORU-10027: buffer overflow, limit of 10000 第六步:实施truncate表中数据恢复 declare tgtowner varchar2(30); tgttable varchar2(30); datapath varchar2(4000); datadir varchar2(30); rects varchar2(30); recfile varchar2(30); rstts varchar2(30); rstfile varchar2(30); blksz number; rectab varchar2(30); rsttab varchar2(30); copyfile varchar2(30); begin tgtowner := 'SYS'; --指定表名的属用户 tgttable := 'TRUNTAB1'; --指定需要恢复的表名 datapath := 'D:\app\Administrator\oradata\lmis\'; --数据文件所在位置 datadir := 'FY_DATA_DIR'; Recover_Truncate_data.prepare_files(tgtowner, tgttable, datapath, datadir, rects, recfile, rstts, rstfile, blksz); Recover_Truncate_data.fill_blocks(tgtowner, tgttable, datadir, rects, recfile, rstts, 8, tgtowner, tgtowner, rectab, rsttab, copyfile); Recover_Truncate_data.recover_table(tgtowner, tgttable, tgtowner, rectab, tgtowner, rsttab, datadir, datadir, recfile,datadir, copyfile, blksz); end; 第七步:查看输出内容和构造表名: 15:32:44: Directory Name: FY_DATA_DIR4 15:32:45: Recover Tablespace: FY_REC_DATA4; Data File: FY_REC_DATA4.DAT 15:32:46: Restore Tablespace: FY_RST_DATA4; Data File: FY_RST_DATA4.DAT 15:32:48: Recover Table: SYS.TRUNTAB1$2 15:32:48: Restore Table: SYS.TRUNTAB1$$2 15:33:04: [fill_blocks] Data Blocks formatted. 15:33:05: [copy_file] begin copy file: FY_DATA_DIR4\FY_REC_DATA4.DAT => FY_DATA_DIR4\FY_REC_DATA_COPY.DAT 15:33:05: [copy_file] completed. 15:33:05: Copy file of Recover Tablespace: FY_REC_DATA_COPY.DAT 15:33:05: begin to recover table SYS.TRUNTAB1 15:33:19: [restore_table] Trying to restore data to SYS.TRUNTAB1$$2 15:33:20: [restore_table] Expected Records in this round: 411 15:33:20: [restore_table] 411 records recovered 此处省略N行输出............................................ 15:33:44: [restore_table] Expected Records in this round: 0 15:33:44: [restore_table] 0 records recovered 15:33:44: 1033 truncated data blocks found. 15:33:44: 72622 records recovered in backup table SYS.TRUNTAB1$$2 15:33:44: Recovery completed. PL/SQL procedure successfully completed 从红色字体可以看出,恢复72622条,刚好是truncate前业务表中记录数,恢复临时表为:SYS.TRUNTAB1$$2 第七步:查看输出内容和构造表名: insert into truntab1 select * from SYS.TRUNTAB1$$2 第八步:验证数据是否完全恢复 select count(*) from truntab1; --72622 至此,truncate掉的数据成功恢复,并且此方法也可以恢复drop table tablename purge删除的数据, 第九步:清理恢复产生的表空间和数据文件 特别提醒:恢复完成后,该方法会在数据库中产生一个表空间:FY_RST_DATA*,恢复一次产生一个,记得及时清理!否则会导致服务器RMAN备份失败ORA-19566 超出损坏块限制(切记) truncate原理: ? ? ? ?TRUNCATE不会逐个清除用户数据块上的数据,而仅仅重置数据字典和元数据块上的元数据(如存储段头和扩展段图)。也就是说,此时,其基本数据并未被破坏,而是被系统回收、等待被重新分配————因此,要恢复被TRUNCATE的数据,需要及时备份其所在的数据文件。 ? ? 方法:用存储过程包Fy_Recover_Data ? ? 它是利用Oracle表扫描机制、数据嫁接机制恢复TRUNCATE或者损坏数据的工具包,这个包是由行内有影响力的DBA大师黄炜先生通过PLSQL编写的,再这里再次感谢他的无私技术分享。Fy_Recover_Data去本文附近中下载 好了,闲话少说,下面通过oracle数据库中scott用户自带的emp表做测试: 步骤1:先把Fy_Recover_Data包拷贝到oracle相关目录下 步骤2:在scott用户下创建test_emp表: SQL> conn scott/tiger; Connected. SQL> select * from tab; TNAME ? ? ? TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS ? ? ? TABLE DEPT ? ? ? TABLE EMP ? ? ? ? ? ? ? ?TABLE SALGRADE ? ? ? TABLE SQL> select count(*) from emp; ? COUNT(*) ---------- 14 SQL> create table test_emp ?as select * from emp; Table created. SQL> select count(*) from test_emp; ? COUNT(*) ---------- 14 步骤3:用truncate删除test_emp表: SQL> truncate table test_emp; Table truncated. SQL> select count(*) from test_emp; ? COUNT(*) ---------- 0 步骤4:在linux中的oracle用户下解压FY_Recover_Data.zip包 $ unzip FY_Recover_Data.zip Archive: ?FY_Recover_Data.zip ? inflating: FY_Recover_Data.SQL? 步骤5:恢复 1)在sys用户下执行存储过程 SQL> @/home/oracle/FY_Recover_Data.SQL Package created. Package body created. 2)查看test_emp表在数据文件中的目录 SQL> select file_name from dba_data_files f, dba_tables t where t.owner='SCOTT' and t.table_name='TEST_EMP' and t.tablespace_name = f.tablespace_name; FILE_NAME -------------------------------------------------------------------------------- /u03/oracle/oradata/WUTONG/datafile/o1_mf_users_cx3xt940_.dbf 3)通过脚本恢复,可以用sqlplus命令行或者plsql developer执行 declare ? ? ? tgtowner varchar2(30); ? ? ? tgttable varchar2(30); ? ? ? datapath varchar2(4000); ? ? ? datadir varchar2(30); ? ? ? rects varchar2(30); ? ? ? recfile varchar2(30); ? ? ? rstts varchar2(30); ? ? ? rstfile varchar2(30); ? ? ?blksz number; ? ? ?rectab varchar2(30); ? ? ?rsttab varchar2(30); ? ? ?copyfile varchar2(30); ? ?begin ? ? ?tgtowner := 'SCOTT'; --table owner ? ? ?tgttable := 'TEST_EMP'; ?--table name ? ? ?datapath := '/u03/oracle/oradata/WUTONG/datafile/'; ? ?--必须和test.t1表所在的数据文件的目录相同 ? ? ?datadir := 'FY_DATA_DIR'; ? ? ? ?--oracle中目录的名字,可以修改 ? ? ?Fy_Recover_data.prepare_files(tgtowner, tgttable, datapath, datadir, rects, recfile, rstts, rstfile, blksz); ? ? ?Fy_Recover_data.fill_blocks(tgtowner, tgttable, datadir, rects, recfile, rstts, 8, tgtowner, tgtowner, rectab, rsttab, copyfile); ? ? ?Fy_Recover_data.recover_table(tgtowner, tgttable, tgtowner, rectab, tgtowner, rsttab, datadir, datadir, recfile,datadir, copyfile, blksz); ? ?end; ? ?以上SQL脚本产生2个表空间(2个数据文件),还有1个copy文件。 4)切换到scott用户下查看会发现多了些不一样以test_emp的表,这时找到相关有数据的表,把数据插入原表test_emp SQL> conn scott/tiger Connected. SQL> select * from tab; TNAME ? ? ? TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS ? ? ? TABLE DEPT ? ? ? TABLE EMP ? ? ? TABLE SALGRADE ? ? ? TABLE TEST_EMP ? ? ? TABLE TEST_EMP$ ? ? ? TABLE TEST_EMP$$ ? ? ? TABLE 7 rows selected. SQL> insert into test_emp select * from TEST_EMP$$; 14 rows created. SQL> commit; Commit complete. SQL> select count(*) from test_emp; ? COUNT(*) ---------- 14 当你看到这一步的时候,说明truncate的表已经完全恢复了,恭喜你数据恢复成功!紧张的压力随之而释放,脸上露出灿烂的笑容和自豪感(做DBA很辛苦,数据库能保持正常运行,DBA在幕后做了大量的工作,有时是不会不被公司其他人理解的。。。。。) 步骤6:恢复数据后,把恢复时产生的2个表空间删除,再删除对应数据文件 SQL> conn / as sysdba Connected. SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u03/oracle/oradata/WUTONG/datafile/o1_mf_system_cx3xt90z_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_sysaux_cx3xt930_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_undotbs1_cx3xt93b_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_users_cx3xt940_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_wutong_cx415lcj_.dbf /u03/oracle/oradata/WUTONG/datafile/FY_REC_DATA.DAT /u03/oracle/oradata/WUTONG/datafile/FY_RST_DATA.DAT 7 rows selected. SQL>?drop tablespace FY_REC_DATA INCLUDING CONTENTS; Tablespace dropped. SQL>?drop tablespace FY_RST_DATA INCLUDING CONTENTS; Tablespace dropped. SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u03/oracle/oradata/WUTONG/datafile/o1_mf_system_cx3xt90z_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_sysaux_cx3xt930_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_undotbs1_cx3xt93b_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_users_cx3xt940_.dbf /u03/oracle/oradata/WUTONG/datafile/o1_mf_wutong_cx415lcj_.dbf 然后去操作系统下把对应的数据文件删除即可 ---------------------
要在Linux上连接Oracle数据库,需要进行以下步骤: 1. 安装Oracle数据库:首先,您需要在Linux系统上安装Oracle数据库。您可以根据您的需求选择不同版本的Oracle数据库,并按照官方文档提供的步骤进行安装。 2. 配置Oracle数据库:安装完成后,您需要进行一些配置,以确保数据库正常运行。这包括设置ORACLE_HOME和PATH环境变量,以及创建数据库实例。您可以参考Oracle官方文档中提供的详细步骤。 3. 开启监听器:在连接Oracle数据库之前,您需要确保监听器已经启动。您可以使用lsnrctl命令来检查监听器的状态和启动监听器。例如,使用命令"lsnrctl status"来查看监听器的状态,使用"lsnrctl start"来启动监听器。 4. 连接数据库:一旦监听器已经启动,您可以使用sqlplus命令来连接Oracle数据库。首先,使用"sqlplus / as sysdba"命令以sysdba身份登录数据库。接下来,您可以执行相应的SQL语句来查询数据库的信息或进行其他操作。 总结一下,要在Linux链接Oracle数据库,您需要先安装Oracle数据库并进行配置,然后启动监听器,最后使用sqlplus命令连接数据库。希望这些步骤对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [sqlserver做链接服务器连接Oracle完整版教程](https://download.csdn.net/download/pxfpxf/88244026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux下的Oracle连接](https://blog.csdn.net/qq_45776897/article/details/130651335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值