Linux系统Oracle常见操作

1.1 登录默认数据库

首先切换到oracle用户,用数据库默认管理员登录。

[root@tsm-zh01 ~]# su – oracle

[oracle@redhat ~]$ lsnrctl start #开启监听

[oracle@tsm-zh01 ~]$ sqlplus / as sysdba #sqlplus 用户名/密码

SQL> startup; #打开数据库

1.2数据库切换

[oracle@tsm-zh01 ~]$ ps -ef | grep ora_dbw0_$ORACLE_SID

oracle 5956 1 0 Sep21 ? 00:16:18 ora_dbw0_tsmdb1

oracle 5958 1 0 Sep21 ? 00:18:05 ora_dbw0_tsmcnnt1

oracle 5972 1 0 Sep21 ? 00:22:59 ora_dbw0_tsmcity1

在oracle用户下输入

export ORACLE_SID=实例名

SQL> select instance_name from v$instance;

INSTANCE_NAME

YES

SQL> alter database flashback off;

Database altered.

查看数据库实例状态

select instance_name,status from v$instance;

INSTANCE_NAME STATUS

+TSMCITY/tsmcity/datafile/users.290.855748279

ONLINE USERS

+TSMCITY/tsmcity/datafile/undotbs1.292.855748279

ONLINE UNDOTBS1

+TSMCITY/tsmcity/datafile/sysaux.272.855748279

ONLINE SYSAUX

  • 关闭RAC上涉及的数据库

srvctl stop database -d XXX

  • 将RAC1启动到mount状态

如果用户将原来的表空间建立在RAC1上,则在RAC1上进行操作;如果是RAC2,就到RAC2上进行操作

SQL>startup mount;

这一步非常重要,否则会提示找不到之前的数据表文件

  • 通过rman 拷贝文件到磁盘组

如果用户将原来的表空间建立在RAC1上,则在RAC1上进行操作;如果是RAC2,就到RAC2上进行操作

RMAN> connect target /

connected to target database: TSMCITY (DBID=2201482424)

RMAN> copy datafile ‘/home/oracle/test.dbf’ to ‘+data’;

Starting backup at 2017/09/17 02:13:03

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=36 instance=devdb1 device type=DISK

channel ORA_DISK_1: starting datafile copy

input datafile file number=00006 name=/home/oracle/test.dbf

output file name=+DATA/devdb/datafile/users.273.954900787 tag=TAG20170917T021305 RECID=3 STAMP=954900786

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

Finished backup at 2017/09/17 02:13:07

Starting Control File and SPFILE Autobackup at 2017/09/17 02:13:07

piece handle=+FLASH/devdb/autobackup/2017_09_17/s_954900552.304.954900789 comment=NONE

Finished Control File and SPFILE Autobackup at 2017/09/17 02:13:10

  • 拷贝完毕后更改文件名

SQL>alter database rename file ‘/home/oracle/test.dbf’ to ‘+DATA/devdb/datafile/USERS.273.954900787’;

  • 启动数据库集群

srvctl start database -d XXX

如果是数据库集群建议采用如上操作,在grid里面启动数据库,采用如下单点操作也可以进行

RAC1

SQL> alter database open;
Database altered.

SQL>

RAC2

SQL> startup;

2.1 用户管理

CREATE USER 用户名 IDENTIFIED BY 密码 PROFILE DEFAULT DEFAUL T TABLESPACE 表空间 ACCOUNT UNLOCK;

PROFILE DEFAULT:默认的用户口令限制,比如密码错误次数、密码锁定时间。

ACCOUNT UNLOCK:账户是否启用或者锁定,默认是启用。

DROP USER 用户名 CASCADE;

若用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。

ALTER USER 用户名 IDENTIFIED BY 改变的口令;

SELECT * FROM ALL_USERS;

2.2 表空间管理

CREATE TABLESPACE 表空间名 DATAFILE ‘/ 路径 / 文件名 .dbf’ SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 2048M [PERMANENT | TEMPORARY] [ EXTENT MANAGEMENT LOCAL | DICTIONARY];

AUTOEXTEND:自动增长,默认关闭 ;

NEXT:下次增长的空间;

MAXSIZE:最大增长空间;

[PERMANENT | TEMPORARY] 永久或者临时表空间,一般先创建临时表空间再创建永久表空间

[ EXTENT MANAGEMENT LOCAL | DICTIONARY] :管理方式,默认是本地管理;

CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 永久表空间名 TEMPORARY TABLESPACE 临时表空间 ;

删除表空间(先脱机)

DROP TABLESPACE 表空间名字 INCLUDING CONTENTS AND DATAFILES;

删除单个数据文件

ALTER TABLESPACE TEST_SPACE DROP

DATAFILE ‘/DATA/ORACLE/ORADATA/ORCL/TEST2.DBF’; #删除文件

ALTER TABLESPACE 表空间名ADD DATAFILE ‘/路径/aaa.dbf’ SIZE 1000M;

ALTER DATABASE 数据库名 DATAFILE ‘/路径/AA.DBF’ RESIZE 2048M;

使表空间联机|脱机

ALTER TABLESPACE game ONLINE|OFFLINE;

使数据文件脱机|连接

ALTER DATABASE DATAFILE ‘ssss’ OFFLINE|ONLINE;

使表空间只读|读写

ALTER TABLESPACE game READ ONLY|WRITE;

select tablespace_name,status from user_tablespaces;

SET lines 2000

SET pagesize 2000

SELECT total.tablespace_name,

Round(total.mb, 2) AS total_mb,

Round(total.mb – free.mb, 2) AS used_mb,

Round(free.mb, 2) AS free_mb,

Round(( 1 – free.mb / total.mb ) * 100, 2)

|| ‘%’ AS used_pct

FROM (SELECT tablespace_name,

Sum(bytes) / 1024 / 1024 AS mb

FROM dba_free_space

GROUP BY tablespace_name) free,

(SELECT tablespace_name,

Sum(user_bytes) / 1024 / 1024 AS mb

FROM dba_data_files

GROUP BY tablespace_name) total

WHERE free.tablespace_name = total.tablespace_name

ORDER BY tablespace_name;

select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;

select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;

SELECT total.tablespace_name,

Round(total.MB, 2) AS Total_MB,

Round(total.MB – free.MB, 2) AS Used_MB,

Round(( 1 – free.MB / total.MB ) * 100, 2)

|| ‘%’ AS Used_Pct

FROM (SELECT tablespace_name,

Sum(bytes) / 1024 / 1024 AS MB

FROM dba_free_space

GROUP BY tablespace_name) free,

(SELECT tablespace_name,

Sum(bytes) / 1024 / 1024 AS MB

FROM dba_data_files

GROUP BY tablespace_name) total

WHERE free.tablespace_name = total.tablespace_name;

SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME,ROUND(BYTES/(1024*1024),0) TOTAL_SPACE FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;

GRANT CONNECT,RESOURCE,DBA TO 用户名;

REVOKE CONNECT,RESOURCE,DBA FROM 用户名; #收回权限

Shutdown 数据库后直接复制相关文件即可,如果需要恢复,停机后再复制到原来的路径,然后开启数据库。

热备份的前提是数据库必须运行在归档模式下, 而且必须备份的只有数据文件,控制文件、重做日志文件、归档日志文件都是靠物理冗余来保护的。

由于数据文件处于备份状态时重做日志后台进程要将这些文件的所有的变化数据块写到重做日志文件中,这对重做日志缓冲区和重做日志文件的压力都增大了,所以需要注意几下加点:

  • 重做日志缓冲区和重做日志文件适当增大
  • 在联机备份时,每次只备份一个表空间
  • 在DML最少的时候做备份

  • 设置数据库日志模式为归档模式

Alter system set log_archive _start=true scope=spfile;

上述参数在oracle 10g已经废弃

Shutdown immediate;

Startup mount;

Alter database archive;

  • 开启数据库

既然是联机备份,数据库肯定是要保持正常开启状态的。

Alter database open;

  • 备份表空间

Alter tablespace 空间名 begin backup; 执行此命令后,用cp命令复制表空间文件即可(用oracle用户拷贝,否则文件权限不对,无法恢复)。

Alter tablespace 空间名 end backup;

select * from v$backup; 查看是否备份成功

  • 重做日志写入

select group#,sequence#,status,archived from v$log; 查看当前重做日志:

Alter system archive log current;

Alter system switch logfile;

重做日志文件一般有3个,切换3次。

  • 如果数据库某个表空间出现问题,无法正常启动数据库,操作如下;

先将表空间提示的数据文件切换到脱机状态

Alter database datafile 10 offline drop; 数字10为系统提示的文件编号;

Select * from v$recover_file; 查询是否为编号为10的文件报错。

删除并复制之前备份的文件到表空间文件位置。

Alter database open;

Recover datafile 10;

Alter datafile 10 online;

完毕。

3.1 热备份

3.2 逻辑备份

expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

该命令不会在操作系统创建真正的目录,最好以oracle等管理员创建。

sql>create directory dpdata1 as ‘/test/dump’;

查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
sql>select * from dba_directories;

给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
sql>grant read,write on directory dpdata1 to scott;

Scott是数据库用户,如果用管理sys去操作,可以不用授权操作,以 \’sys/密码@实例名 as sysdba\’的形式登录即可。比如\’sys / as sysdba \’

1)按用户导

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1 logfile=expdpd.log version=10.2.0.4

Schemas=用户名,Logfile可以不指定,系统会自动生成

version如果指定版本号:则可以再低版本中进行恢复保证兼容性

2)并行进程parallel

expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott_%U.dmp parallel=4 job_name=scott3

注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式为scott_nn.dmp,其中nn 从 01 开始,然后按需要向上增加,上限为最大线程数。

Sql>show parameters cpu #查看cpu支持的线程数。

3)按表名导

expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1

默认导出的该用户名下面的表,如果需要导出其他用户的表 tables=用户名.表名

4)按查询条件导

expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query=’WHERE deptno=20′

5)按表空间导

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example

6)导整个数据库

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y

7)partfile

expdp partfile=expdp.txt

文本文件里面可以写脚本,命令

  • 导到指定用户下

impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott

即使用户不存在也可以导入数据,建议先建立用户在导入数据。

2)改变表的owner

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system

将表的所有者从scott变为system

3)导入表空间

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example

4)导入数据库

impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y

5)追加数据

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION

您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:

expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export

在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。

分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。

3.3 冷备份(非归档模式)

拷贝相关的数据文件、归档日志、重做日志、控制文件即可,可以保持文件一致性。

connect tigger/sccot as sysdba;

shutdown immediate; #先关闭数据库

cp d:/test*.dbf d:export #–cp 文件 目标文件夹 数据文件

cp d:/test*.ctl d:export #–控制文件

cp d:/test*.log d:export #–日志文件

startup;

查看控制文件路径

select status,name from v$controlfile;

查看数据文件路径

select status,file_name from dba_data_files;

查看日志文件

select group#,status,member from v$logfile;

3.4 RMAN备份和恢复

Sql> alter database archivelog; #开启归档

Sql>archive log list; #查看归档状态

一般情况恢复目录是用另外一台服务器的数据库来创建的,以保证当前服务器宕机后,恢复目录仍然可以使用。

Sqlplus 远程用户名/密码@远程数据库名 ;

Sql>create tablespace 表空间名 datafile ‘路径’ size 200m autoextend on next 50m maxsize 500m;

Sql>create user 用户名 idendified by 密码 default tablespace 表空间名; #创建用于管理恢复目录表空间的用户

Sql>grant connect,resource,recovery_catalog_owner to 用户名; #授予用户管理表空间的权限

在恢复用表空间中创建恢复目录

rman

Rman>connect catalog 远程用户/密码@远程数据库名; #用rman 连接到远程数据库

Rman>create catalog; #创建恢复目录

创建完恢复目录后,在远程数据库中登录用户,可以查到多了很多数据表信息。

Rman target /; #用rman连接需要备份的数据库

Rman >connect catalog 用户名/密码@远程数据库名;

Rman>register database; #注册需要备份的数据库到恢复目录

注册完毕后可以在恢复目录看到数据库的注册信息

%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为
日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)

在rman连接到本地数据库之后,必须再远程连接恢复目录,这样才会将备份信息写入到恢复目录,否则仍然是nocatlog模式,所有信息值存入到控制文件中。

rman target / catalog 用户名/密码@远程数据库名 #前半部分是登录到本地,后半部分连接到远程

rman target /

Rman> connect catalog 远程用户名/密码@远程数据库名;

Rman>backup as compressed backupset database plus archivelog delete all input;

plus archivelog 备份的同时备份归档日志,包括刚刚运行backup所生成的日志

delet all input 删除所有已备份的的归档日志

RMAN>configure channel device type disk format ‘/home/oracle/oradata/backup/data_%d_%M_%U’;

设置数据文件备份路径

RMAN>configure controlfile autobackup format for device type disk to ‘/home/oracle/oradata/backup/ctl_%d_%M_%F’;

设置控制文件备份路径

通道备份

run
{

allocate channel ch1 device type disk;

allocate channel ch2 device type disk;

backup database format ‘/home/oracle/oradata/backup/Data_%d_%M_%U’

plus archivelog format ‘/home/oracle/oradata/backup/log_%d_%M_%U’;

sql ‘alter system archive log current’; #备份所有的归档日志

release channel ch1;

release channel ch2;
}

报错 operation disallowed: snapshot control file enqueue unavailable

错误信息

RMAN> backup current controlfile format ‘/tmp/xifenfei.ctl’;

Starting backup at 10-JUN-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=628 instance=orcl1 devtype=DISK

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

cannot make a snapshot control file

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 06/10/2015 16:03:10

ORA-00230: operation disallowed: snapshot control file enqueue unavailable

查看会话

SQL> SELECT s.SID, USERNAME AS “User”, PROGRAM, MODULE,

2 ACTION, LOGON_TIME “Logon”

3 FROM V$SESSION s, V$ENQUEUE_LOCK l

4 WHERE l.SID = s.SID

5 AND l.TYPE = ‘CF’

6 AND l.ID1 = 0

7 AND l.ID2 = 2;

SID User

MODULE

648 SYS

rman@db1 (TNS V1-V3)

backup full datafile

0000152 STARTED111 03-JUN-15

查询并 kill 相关 session

查询数据库 SID

Sql>select saddr,sid,serial#,paddr,username,status from v$session where sid = 648 ;SADDR SID SERIAL# PADDR USERNAME STATUS—————- ———- ———- —————- ———————————————————— —————-00000000849D3D48 648 319 000000008488C070 SYS ACTIVE

查询系统 SPID

SQL> select spid from v$process where addr in(select paddr from v$session where sid=648);

SPID

Original: https://www.cnblogs.com/simendavid/p/16715743.html
Author: 湖南馒头
Title: Linux系统Oracle常见操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574072/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 选择排序算法C语言实现

    选择排序C语言实现 int select_sort(int *list, int len) { int i = 0; int j = 0; int tmp = 0; int sma…

    Linux 2023年6月14日
    075
  • 设计模式——命令模式

    命令模式定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和回复的功能。 Receive接收者角色 该角色就是干活…

    Linux 2023年6月7日
    0106
  • Redis配置参数详解

    Redis是一个应用非常广泛的高性能Key-Value型数据库,与memcached类似,但功能更加强大!本文将按照不同功能模块的方式,依次对各个功能模块的配置参数进行详细介绍。 …

    Linux 2023年5月28日
    082
  • vscode shellArgs.windows参数如何设置使得powershell终端字符集编码为UTF-8?

    网上的大部分是这个答案: “terminal.integrated.shellArgs.windows”: [“-NoExit”, “/c”, “chcp 65001”] 如果你觉…

    Linux 2023年6月13日
    095
  • 如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化

    如何设置 QEMU 输出到控制台并使用 Shell 脚本自动化 原文:How to Setup QEMU Output to Console and Automate Using …

    Linux 2023年5月28日
    0104
  • Linux驱动编程1——内核编译

    1.安装必要的内核开发包,包括gcc、make、libncurses-dev。 $ apt-get install gcc make libncurses-dev 2.$ make…

    Linux 2023年6月8日
    088
  • 操作系统

    第1章习题1. 设计现代OS的主要目标是什么? OS的作用可表现在哪几个方面? 为什么说操作系统实现了对计算机资源的抽象? 试说明推动多道批处理系统形成和发展的主要动力是什么。 何…

    Linux 2023年6月6日
    079
  • PicGo图床设置

    PicGo图床设置 介绍 PicGo是一款开源的图床管理工具,是可以快速的上传图片并且获得图片的URL链接的工具。目前支持Windows和macOS平台,可以方便的进行拖拽、复制粘…

    Linux 2023年6月6日
    0112
  • 在Ubuntu机器上使用war包安装Jenkins

    因为一些需求需要迁移之前使用的Jenkins,原来是按照官方文档使用apt方式安装的,这次搬迁后的机器由于默认不通外网(可以通过代理走外网),因此趁此机会,尝试改用war包方式安装…

    Linux 2023年6月6日
    0109
  • 数据结构 二叉树

    cpp;gutter:true;</p> <h1>include</h1> <p>using namespace std;</…

    Linux 2023年6月13日
    074
  • 【论文笔记】(2017,BIM)Adversarial Machine Learning at Scale

    本文主要是给出了两类多个对抗攻击方法:one-step 攻击和 multi-step 攻击,并在大型模型和大型数据集上对这些方法进行对比实验,实验结果发现使用 one-step 样…

    Linux 2023年6月7日
    078
  • Linux Ubuntu 添加新用户

    1. 了解配置文件 Linux下与用户信息相关的配置文件有 /etc/passwd、 /etc/group、 /etc/shadow等,其权限分别如下: /etc/passwd:保…

    Linux 2023年6月14日
    094
  • Makefile

    target … : prerequisites … command … … target可以是一个object file(目标文件),也可以是一个执行文件,还可以…

    Linux 2023年6月7日
    089
  • 全网唯一的、DIY的Prometheus高可用方案,生产未上,测试先行。

    写在开篇 关于prometheus的高可用方案,经过笔者不断的研究、对比、和搜索,发现不管是官方、还是各大搜索引擎搜索出来的方案,都不符合笔者的需求。因此,笔者自己设计了一套pro…

    Linux 2023年6月7日
    078
  • [ Shell ] 用 while + case 实现 GetOptions 效果

    https://www.cnblogs.com/yeungchie/ 可以用 getopt,但我还是喜欢自己写这个过程,便于我控制更多细节。 下面要实现的效果是,从命令行参数中分析…

    Linux 2023年6月7日
    098
  • Java类初始化顺序小结

    第一种情况(单一类) 测试结果 &#x9759;&#x6001;&#x53D8;&#x91CF; &#x9759;&#x6001;&…

    Linux 2023年6月7日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球