关于项目实施中oracle运维

Arvin.zhang 2019年5月9日10:35:02 评论 187

在项目实施中,特别是涉及到一些传统行业项目,还会用到类似oracle数据库,虽然和当前大数据相比,oracle在以前还是相当可以,各个方面都做的不错,现在给大家分享一些项目中实际用到的运维命令和一些问题总结!

启停数据库

// 停止数据库实例
sqlplus / as sysdba
// 进入sqlplus后,关闭数据库
shutdown immediate
// 启动数据库命令
startup
// 退出 
exit

监听服务

// 查看状态
lsnrctl status
// 停止监听服务
lsnrctl stop
// 启动监听服务
lsnrctl start
// 查看服务
lsnrctl service

sqlplus相关配置

set linesize 200;
set pagesize 30;
set heading off;
//登录
sqlplus test/123456@10.16.1.111:1521/orcl

sqlplus脚本相关

  • sqlplus中引用shell变量

表空间相关

创建表空间

//单个文件不能超过32G,总文件数不能超过db_files参数
create tablespace sxdata2 logging datafile '/mnt/data2/oradata/sxdata.dbf' size 10000m autoextend on next 200m maxsize 3500000m extent management local;
// 增加表空间文件
add tablespace sxdata2 datafile '/mnt/data2/oradata/sxdata1.dbf' size 10000m autoextend on next 200m maxsize 3500000m;

// bigfile创建的表空间不受单个文件32G的限制,但不能增加datafile
create bigfile tablespace sxdata2 logging datafile '/mnt/data2/oradata/sxdata.dbf' size 10000m autoextend on next 200m maxsize 3500000m extent management local;

查看表空间

select username, default_tablespace from dba_users;
// 查看用户表空间
select USERNAME,DEFAULT_TABLESPACE from dba_users where USERNAME='';

查看表数据量

select bytes/1024/1024 as "MB",segment_name from user_segments group by segment_name;

ORA-01652临时表空间不足

1.查看临时表空间是否支持扩展
select d.file_name,d.tablespace_name,d.autoextensible from dba_temp_files d;

2.扩展空间、
mkdir -p /mnt/data2/oracle/oradata/orcl/
chown -R oracle:oinstall /mnt/data2/oracle/oradata/orcl/
chmod -R 755 /mnt/data2/oracle/oradata/orcl/
3.增加拓展文件
alter tablespace temp add tempfile ‘/mnt/data2/oracle/oradata/orcl/temp01.dbf’ size 1000M autoextend on ;

ORA-30036 Undo表空间不足

1.查看当前实例使用的Undo表空间
show parameter undo;
可以看到,使用的Undo表空间为“UNDOTBS1”,与报错内容中的名字一致。
2.查看数据库可用的Undo表空间
SELECT tablespace_name FROM dba_tablespaces WHERE contents=‘UNDO’;

发现当前只有UNDOTBS1

3.查看表空间使用情况
——查看表空间使用情况
select b.tablespace_name as “表空间”,
b.file_name as “物理文件名”,
b.bytes / 1024 / 1024 as “当前大小(M)”,
(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 as “已使用(M)”,
substr((b.bytes - sum(nvl(a.bytes, 0))) / (b.bytes) * 100, 1, 5) as “使用率(%)”,
case b.autoextensible
when ‘YES’ then ‘是’
else ‘否’
end as “是否自增”,
b.maxbytes / 1024 / 1024 as “自增最大容量(M)”
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
and a.tablespace_name in (‘UNDOTBS1’, ‘UNDOTBS2’)
group by b.tablespace_name, b.file_name, b.bytes, b.autoextensible, b.maxbytes
order by b.tablespace_name;

4.解决方法

(1).为表空间增加数据文件

alter tablespace UNDOTBS1
add datafile ‘+DATADG/esbmssdb/datafile/undotbs1.4.dbf’ –数据文件名
size 100M –初始大小
autoextend on next 1M maxsize 8192M; –自增,每次增加1M,最大为8192M

(2).设置文件自动扩展

alter database
datafile ‘+DATADG/esbmssdb/datafile/undotbs1.3.dbf’
autoextend on next 1M maxsize 8192M;

(3).切换Undo表空间

alter system set undo_tablespace = UNDOTBS2;

注:如果数据库中只有一个可用的Undo表空间,则使用前两种方法。

表被锁处理方法

1.查询被锁表
select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY,c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL from v$locked_object a,dba_objects b, v$session c where b.object_id = a.object_id AND a.SESSION_ID =c.sid;

2.select session_id from v$locked_object;

3.select sid, serial#, username, osuser from v$session where sid = ‘223’;
4.alter system kill session ‘225, 9’;

如果报错 ora 00031,查进程,杀进程

select sid, spid from v$session s , v$process p where sid = ‘225’ and s.paddr = p.addr;
返回值spid为15875

5.kill -9 15875
回头,再alter system kill session ‘225, 9’;

6.最后再删除表
drop table 表名;

创建DBLINK

create public database link qhfklink connect to myusername identified by 123456
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.10)(PORT = 1521))
)
(CONNECT_DATA = (SERVICE_NAME = orcl)))';

用户相关

创建用户、授权

CREATE USER dbtest IDENTIFIED BY 123456 ;
grant resource,connect,dba to dbtest;

impdp expdp

创建数据目录、授权

CREATE DIRECTORY dumptest AS ‘/home/oracle/dbtest’;
GRANT READ,WRITE ON DIRECTORY dumptest TO dbtest;

创建测试数据

create table t1 (id int);
insert into t1 values (123);

创建物理数据目录,导出

mkdir /home/oracle/dbtest

按照表导出

expdp dbtest/123456@orcl directory=dumptest dumpfile=test.dmp tables=t1

其他示例(待整理)

1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3

3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;

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;

导入数据

导入前,删除dbtest用户下的t1表,测试导入;
impdp dbtest/123456@orcl directory=dumptest dumpfile=test.dmp tables=t1

参考

字符集相关

查看服务端字符集

select * from nls_database_parameters;

设置客户端字符集

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
weinxin
优惠推荐
pc扫一扫,移动端长按扫一扫,更多优惠,不要错过呦!
Arvin.zhang

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: