最近新系统上线,新建数据库,表空间,用户,数据处理等等一套操作下来,发现很多技术细节都只能百度。磕磕绊绊总算把问题解决了,总结一下,以备后用。
一、第一步数据库装好了,起服务,起监听:
1)切换到oracle用户:su - oracle
2)以dba身份登录sqlplus: sqlplus / as sysdba
3)启动数据库:startup
4)如果是关闭数据库:shutdown immediate
5)退出sqlpuls控制台:exit
6)启动监听,监听属于操作系统级进程,不需要登录Oracle:lsnrctl start
关闭监听:lsnrctl stop
关于sqlplus登录的用法:(以下来自csdn博客)
1.sqlplus / as sysdba 操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态。
2.sqlplus username/pwd 连接本机数据库,不需要数据库服务器的listener进程,但是由于需要用户名密码的认证,因此需要数据库服务器处于可用状态才行。
3.sqlplus usernaem/password@orcl 通过网络连接,这是需要数据库服务器的listener处于监听状态。
4.sqlplus username/pwd@host:ip/service_name 如:
sqlplus tiger/scott@172.16.10.1:1521/orcl 以用户名/密码、IP:Port、服务名 为参数登录。可以指定IP,适合远程连接。
5.sqlplus /nolog 先使用sqlplus命令,而不连接数据库,然后用conn命令登录。
然后:conn tiger/scott 或 conn tiger/scott@172.16.0.1/orcl
二、建表空间,用户,赋权等操作:
1.先删再建:
--删除用户
DROP USER POP CASCADE;
--删除表空间
DROP TABLESPACE TBS_POP INCLUDING CONTENTS AND DATAFILES;
--创建表空间,初始化10G,每次扩1G,最大32G
--有一个有意思的问题:Oracle单表最大容量是多少:首先表不能跨表空间,所以理论上单表空间的最大容量就是单表的最大容量,表空间单个数据文件最大32G(20200529重要更正:普通8K的块,单个数据文件最大32G,如果上调到16K,则单个数据文件最大64G,依次类推),最多1024个数据文件,因此粗略算下来单表空间的最大容量为32G*1024=32T。以后遇到这个问题,就知道怎么回答了!
create tablespace TBS_POP datafile '/dbdata/orcl/tbs_pop.dbf' size 10G autoextend on next 1G maxsize 32G;
--后续需要扩展表空间
alter tablespace TBS_POP add datafile '/dbdata/orcl/tbs_pop_01.dbf' size 10G autoextend on next 1G maxsize 32G;
--或者干脆
alter tablespace TBS_POP add datafile '/dbdata/orcl/tbs_pop_01.dbf' size 32G;
--创建用户,指定默认表空间为上面创建的表空间
create user POP identified by pop default tablespace TBS_POP ;
--为用户赋权,connect 即为create session权限,即登录权限,resource权限包含:创建CLUSTER,INDEXTYPE,OPERATOR,PROCEDEURE,SEQUENCE,TABLE,TRIGGER,TYPE的权限;
grant connect, resource to pop;
--如有需要可以给予dba权限
grant dba to pop;
--想查看都有哪些权限,实际开发中仅有connect和resource可能很不方便,比如resource仅仅只有列出来的那些对象的创建权限,想要修改、删除、更新等操作就要单独赋权了
select * from dba_sys_privs where grantee='RESOURCE';
--想要查看表空间的使用情况,主要从两张表中出,别看别人写的语句很复杂各种关联,其实就这两张表,了解了其中含义,你可以写自己的语句
select * from dba_data_files;--表空间对应的数据文件情况,一个数据文件一条数据,可以看到文件的大小,是否在用等;
select * from dba_free_space;--表空间的使用情况,一个数据文件一条数据,使用了多少个字节
两个表分别按表空间名字分组sum之后,就可以得出表空间的总大小,空闲大小,俩个结果按表空间关联之后,就可以计算出表空间的使用率等指标。
三、关于日志
一般生产环境数据库都开了归档日志,对于不那么重要的数据库会设置自动删除一段时间之前的归档日志。
遇到短时间大批量数据insert、update操作的情况,归档日志会急剧膨胀,然后撑爆磁盘——是的我的磁盘被归档日志撑爆了。
这是由于事先1)没有对数据体量进行预估;2)对数据操作会产生大量日志的情况没有概念。
处理办法就是修改了dba设置的删除归档日志脚本,将删除3天以前的日志,改为删除1小时以前的日志。然后重启数据库,为什么要重启呢?因为数据库已经登不上了,删了日志腾出空间之后,重启才恢复。
20200417补充:不想写日志可以使用nologging模式:
insert /*+Append*/ into tab1 nologging select * from tab2;
或者:
插入前:
alter table tab1 nologging;
insert /*+Append*/ into tab1 select * from tab2;
插入后:
alter table tab1 logging;