linux上oracle搭建

前情提要:

生产环境数据库数据过多,为减少数据库空间,将一些历史查询数据放到另一个数据库中,由于一个服务没法根据不同情况访问不同数据库,因此新搭建一套后台服务,该服务指向新的数据库

1 基于linux环境的oracle安装

1.1 环境准备

  1. 新建一个oinstall组
groupadd oinstall
  1. 新建一个dba组
groupadd dba
  1. 在/home/orcle下建立一个名为oracle的用户,其主组是oinstall,附属组是dba
useradd -g oinstall -G dba -m -d /home/oracle oracle

--useradd命令:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  1. 为oracle用户设置密码
passwd oracle
  1. 建立目录,修改权限,修改所有者
    创建oracle软件安装目录和数据文件存放的目录
mkdir -p(递归创建目录) /home/oracle/product/11.2.0/db_2
#修改/home/oracle下的所有文件的用户和组改为oracle(用户),oinstall(组)
chown -R oracle:oinstall /home/oracle
#修改/home/oracle下所有文件的权限,用户本身拥有所有权限,组内用户拥有读和执行权限,组外其他用户也是读和执行(读4,写2,执行1)
chmod -R 755 /home/oracle
#创建oracle日志目录
mkdir -p /home/oraInventory 
#修改该目录所属用户和组
chown -R oracle:oinstall /home/oraInventory
  1. 打开oracle图形化安装界面

    1. 在安装目录下(/home/oracle/database)执行runInstaller:sh ./runInstaller
    2. 无法通过xshell直接打开图形化界面:
      因为xshell本身不带unix的图形化功能,应该下载xmanager(第一次需人为启动),然后export DISPLAY=本机ip:0.0,最后在xshell中–属性(alt+p)–连接–ssh–隧道–转发X11连接到Xmanager,并且必须使用oracle用户ssh登陆,不可以通过ssh登陆root再su - oracle来打开安装软件
    3. PRVF-0002错误:
      在xshell中输入hostname查到主机别名,将此别名加入到/etc/hosts文件中,例:我本机hostname为datastore,修改后/etc/hosts/内容大致为
    127.0.0.1       datastore localhost.localdomain localhost
    ::1             datastore localhost6.localdomain6 localhost6
    
    1. 安装软件为乱码:
    export LANG=en_US.UTF-8 
    
  2. 图形界面流程

linux上oracle搭建_第1张图片
选next
linux上oracle搭建_第2张图片
选next
linux上oracle搭建_第3张图片
选next
linux上oracle搭建_第4张图片
选next
linux上oracle搭建_第5张图片
选next
linux上oracle搭建_第6张图片
选next
linux上oracle搭建_第7张图片
选next
linux上oracle搭建_第8张图片
选next
linux上oracle搭建_第9张图片
选yes
linux上oracle搭建_第10张图片
选next
linux上oracle搭建_第11张图片
选next
linux上oracle搭建_第12张图片
如果只有warning没有failed,ignore All然后选next
linux上oracle搭建_第13张图片
选yes
linux上oracle搭建_第14张图片
选install

  1. 配置oracle用户的环境变量
vi /home/oracle/.bash_profile
#新增下面值,原有值不变
ORACLE_BASE=/home/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1;export ORACLE_HOME
ORACLE_SID=fcrhost;export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH;export PATH
  1. 配置监听:netca
    linux上oracle搭建_第15张图片
    选next
    linux上oracle搭建_第16张图片
    选next
    linux上oracle搭建_第17张图片
    选next
    linux上oracle搭建_第18张图片
    选next
    linux上oracle搭建_第19张图片
    选next
  2. 建立实例
    dbca
    linux上oracle搭建_第20张图片
    选next
    linux上oracle搭建_第21张图片
    选next
    linux上oracle搭建_第22张图片
    选next
    linux上oracle搭建_第23张图片
    选next
    linux上oracle搭建_第24张图片
    选next
    linux上oracle搭建_第25张图片
    选next
    linux上oracle搭建_第26张图片
    选next
    linux上oracle搭建_第27张图片
    选next
    linux上oracle搭建_第28张图片
    选next
    linux上oracle搭建_第29张图片
    选next
    linux上oracle搭建_第30张图片
    选next
    linux上oracle搭建_第31张图片
    选next
    linux上oracle搭建_第32张图片
    选next
    linux上oracle搭建_第33张图片
    选next
  3. 启动数据库与监听
--数据库
sqlplus / as sysdba; startup
--监听
lsnrctl start
  1. 建立特定表空间,表空间的位置决定数据文件位置,需要放在大点的空间里,可以不跟oracle客户端一个路径
--1.建立
sqlplus / as sysdba;
create tablespace data_spc01 datafile '/home/oracle/oradata/fcrhost/fcr01.dbf' size 10240m autoextend on next  1024M maxsize 20480M;
--2.删除表空间,同时删除表空间所包括的数据文件从而释放硬盘空间
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
--3.表空间已满,为表空间增加数据文件
ALTER TABLESPACE tablespace_name ADD DATAFILE '/home/oracle/oradata/fcrhost/fcr02.dbf' SIZE 10240M autoextend on next 1000M maxsize 20480M;
  1. 建立用户,导库,授权等一系列操作
--删除用户
drop user $1 cascade;
--创建用户,并为其设置密码和表空间
create user $1 identified  by $1 default tablespace data_spc01;
--为该用户赋予dba权限
grant dba to $1;
--建立directory:
sqlplus / as sysdba;
create directory mydp as '/home/oracle/mydp';
--导入数据库(重复导入一个数据库时,或某个表的它的表和索引所在的表空间不同时,需要加入transfor参数)
impdp \'/ as sysdba\' directory=mydpwsh dumpfile=c50hst_20170301-wsh.dmp schemas=c50hst,c50brn content=all version=compatible logfile=import.log transform=OID:N transform=segment_attributes:n
--如果导入一半掉了,需要重新导入
impdp \'/ as sysdba\' attach=job名
--修改用户密码
alter user $1 identified by $1;
--赋权限
sqlplus -S sys/oracle as sysdba <
  1. 从已有环境导出c50hst和c50brn用户的dump文件,impdp跟expdp选项几本相同只不过一个用来导出,一个用来导入
--导出语句
expdp c50hst/c50hst directory=mydp dumpfile=20170417wsh.dmp content=all schemas=c50hst,c50brn version=compatible logfile=20170417wsh.log
--导入语句
impdp \'/ as sysdba \' directory=mydp dumpfile=20170417wsh.dmp content=all schemas=c50hst,c50brn version=compatible logfile=20170417wsh.log;
--1. directory:放入directory为mydp对应的路径的文件夹中,且directory必须放在前面不能放在最后,否则报错
--建立directory:
sqlplus / as sysdba;
create directory mydp as '/home/oracle/mydp';
expdp 用户名/密码 directory=mydp dumpfile=a.dump;
--查询指定directory对应oracle所在服务器的物理路径
select * from dba_directories t where t.directory_name='MYDP';
--2. content:用于指定要导出的内容,all(对象及其数据),data_only(数据),metadata_only(对象),默认为all
expdp 用户名/密码 DIRECTORY=mydp DUMPFILE=a.dump content=all
--3. dumpfile:指定导出的文件的名称,默认值为expdat.dmp
--4. exclude/include:排除或只包含某些对象
-expdp scott/tiger directory=dump dumpfile=a.dmp exclude=SEQUENCE,TABLE:"IN ('EMP','DEPT')"
--5. full:指定是否全库导出 
---full=n或不加full: 默认导出连接数据库的用户数据库对象
full=y导出整个数据库:
expdp lttfm/lttfm@fgisdb dumpfile =full.dmp full=y logfile=full.log directory=dir_dp job_name=my_job
--6. job_name:指定当前导出的任务名,导出完成后job自动卸载,默认值为SYSTEM.SYS_EXPORT_SCHEMA_01
--7. 客户端退出导出时,可以通过expdp 用户/密码 attach=用户名.定义的任务名 来连接到正在执行中的job监视界面
-SELECT * FROM DBA_DATAPUMP_JOBS;--查看存在的job
--在监视界面指令:
status:查看当前JOB的状态及相关信息
stop_job:暂停JOB(暂停job后会退出expor模式)
start_job:打开暂停的JOB(并未开始重新执行)
continue_client :通过此命令重新启动 "LTTFM"."MY_JOB"
kill_job:取消当前的JOB并释放相关客户会话(将job删除同时删除dmp文件)
exit_client:通过此命令退出export模式
--8. logfile:导出日志名,默认export.log
--9. query:用于限定导入的表中特定的数据,之前的exclude/include用于限定导入的对象
--表示导入的rec_txn_log_mmdd一条数据也不要,与remap_table连用时会失效
query=rec_txn_log_mmdd:"where 1=2";
--10. schemas:该方案用于指定执行方案模式导出,默认为当前用户方案.
--11. tables:表模式导出
tables=表1,表2,表3
--12. parfile:指定导出参数所在的文件,此时以命令行定义的dumpfile为主,不以wsh.par中的dumpfile为主,谁在后面以谁为主
parfile=wsh.par dumpfile=expdp.dmp
--13. remap_schema:从A用户导出的数据,想要导入到B用户中去
remap_schema=A:B
--14. remap_tablespace:从表空间A导出的数据,想导入表空间B中去
remap_tablespace=data_01:data_wsh_01
  1. 建立dblink
--A机上数据库想访问B机上数据库中的内容,需在A上创建连接到B的dblink
--为A上当前用户赋予创建dblink的权限
grant create database link to c50hst;
--查看global_name值,如果该值为true,link名必须与远程数据库名(global_name)相同
show parameter global_name;(true/false)
select * from global_name;(远程数据库名)
--建立database link的两种方式
--第一种
create database link khlink connect to c50hstsc30 identified by c50hstsc30 using '(DESCRIPTION=
    (ADDRESS_LIST=
        (ADDRESS=(PROTOCOL = TCP)(HOST = 172.18.1.127)(PORT=1521))
    (CONNECT_DATA = 
        (SERVER = DEDICATED)
        (SERVICE_NAME = fcrhost)
     )
)';
--第二种
create database link khlink connect to c50hstsc30 identified by c50hstsc30 using 'fcrhost';  
其中fcrhost在tsname.ora中定义
--查看当前用户下的dblink
select * from dba_db_links t where t.db_link=upper('khlink');
--删除dblink
drop database link khlink;
--在A上访问B上的表
select * from 表名@dblink名 from dual;
  1. 建立同义词
--给予创建同义词的权限
grant create synonym link to c50hst;
--创建同义词
create synonym tf_user_profile for c50hst.tf_user_profile@khlink;
--删除同义词
drop synonym tf_user_profile;
--查看当前用户下同义词
select * from dba_synonyms;
  1. 查看表空间等属性
--1. 查看所有表空间
select * from dba_tablespaces t ;
--2. 检查没删用户之前,DATA_SPC01表空间下剩余可使用空间
select sum(t.BYTES) / (1024 * 1024 * 1024)
  from dba_free_space t
 where t.TABLESPACE_NAME like 'DATA_SPC01%';
--3. 预测删除DATA_SPC01表空间下所有用户后,可以扩展出的空间
select sum(t.BYTES) / (1024 * 1024 * 1024)
  from dba_segments t
 where t.tablespace_name = 'DATA_SPC01';
--4. df -m查看操作系统中还剩余多大空间,该空间要刨除放入的dmp文件,和dmp.gz文件的大小
--5. 2+3+4就是最终该数据库极限可以容纳的总数据大小 
--6. 查看表空间对应的数据文件的总大小
select sum(bytes)/(1024*1024*1024) from dba_data_files t where t.tablespace_name='DATA_SPC01';
--7. 查看某张表使用的空间大小
select sum(bytes)/(1024*1024*1024) from dba_segments t where t.segment_name='GLM_DC_LOGMD_RZ';
--8. 查看可以释放的datafile的空间的大小,及语句拼写,trunc是因为必须输入一个整数,+1是因为这个整数必须必查出的保留空间要大,如果dba_freespace的空间有100G,不代表就可以缩减100个G,因为水位线不是与所用空间正好平齐的
select a.file#,
       a.name,
       a.bytes / (1024 * 1024) currentmb,
       ceil(hwm * a.block_size) / (1024 * 1024) resizeto,
       (a.bytes - hwm * a.block_size) / (1024 * 1024) releasemb,
       'alter database datafile ''' || a.name || '''resize' ||
       trunc(ceil(hwm * a.block_size) / (1024 * 1024) + 1) || 'M;' resizecmd
  from v$datafile a,
       (select file_id, max(block_id + blocks - 1) HWM
          from dba_extents
         group by file_id) b
 where a."FILE#" = b.file_id(+)
   and (a."BYTES" - hwm * block_size) > 0
 order by 5 desc;

  1. 删除原有用户
--1. 查看每个Oracle帐户的连接总数
select username,count(username) from v$session where username is not null group by username; 
--2. 比较常用的显示客户端信息的sql
--sid与serial#用于杀掉进程
--username:Oracle用户名
--program:连接类型,例如JDBC还是plsqldev.exe
--machine:客户端进程主机名
--client_info:默认为空,可以人为设置成客户端进程ip
--osuser:客户端进程用户名
--port:客户端进程端口
select sid,serial#,username,program,machine,client_info,osuser,port from v$session where username is not null order by username,program,machine;   
--3. 设置触发器,当客户端连接Oracle时,登记其ip到v$session的client_info字段中
create or replace trigger on_logon_trigger after logon on database  
begin  
    dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));  
end;   
/  
--4. 查看当前Oracle的连接数
select count(*) from v$process;
--5. 查看数据库允许的最大连接数
select value from v$parameter where name='processes';   
--6. 修改最大连接数
alter system set processes=300 scope=spfile;
--7. 可以先进行3,然后重启数据库,根据2中client_info登记的ip和port登记的端口到指定机器,将自动连接此数据库的进程(例如weblogic数据源)关掉,之后根据步骤2的sid与serial#杀掉不自动重新连接的进程(例如plsql)
--8. 删除用户失败,发现为数据错乱,导致obj$产生孤立记录导致,需要关联user$表和obj$,将所有用户的obj$相关记录删除,接下来就可以继续正常删除用户了
select * from user$ t,obj$ b where t.name='C50HST' and t.user#=b.owner# and b.type#='1';
  1. 特殊数据调试

    select *
      from XF_ST_CAP_INPUT_TXN b
     where b.cod_acct_no='1000100026323196' for update;
    select * from xf_ol_td_sweepin_stream t for update;
    delete  from xf_ol_td_sweepin_stream t where t.cod_td_acct_no='4002100000083626';
    declare
    var_number number;
    begin
    for i in 1..2000 loop
      select TF_REF_NO_SEQUENCE_20190329.Nextval into var_number from dual;
    end loop;  
    end;
    /
    --pk_glm_fe存储过程修改,第6行
     /*SELECT DISTINCT tx_date INTO v_date FROM glm_gl_bal;*/
          select to_number(to_char(t.dat_last_process,'yyyymmdd')) INTO v_date from ba_bank_mast t;
    --新开立标准户
    pk_tf_internal_acct_open. ap_tf_internal_acct_open
    --修改是否可以刷卡检查
    select t.val_param from tf_ba_param t where t.nam_param='SWEEP_CARD_ENABLE_FLG' for update;
    --修改柜员密码到期限制
    update tf_user_profile t set t.dat_next_pri_pswd_ch=to_date('20991231','yyyymmdd');
    

你可能感兴趣的:(日常工作总结)