学习目标:
重建测试库,目的只是自己看数据库的包体,函数那些,就自己弄着玩的,导出的元数据只有表结构,包体,函数等等那些,但是不含表数据,所以,表空间给个10M就行了。
数据库已经安装好了,可以参考我linux上安装数据库的文章。
学习内容:
--(1)、正式库数据库导出
这一部不需要执行,原数据已经导出。
sql
expdp system/123123 dumpfile=NETSC_FULL_DATA.dmp directory=expdmp logfile=NETSC_FULL_DATA.log full=Y COMPRESSION=ALL exclude=STATISTICS
2)、测试库创建表空间
--------------------------------------------------查询表空间语句-------------------------------------------
sql
SELECT T.TABLESPACE_NAME,
T.DATAFILE# "# of datafile",
TO_CHAR(T.TOTAL, '999,999,999,999') "Total (M)",
TO_CHAR(F.FREE, '999,999,999,999') "Free (M)",
TO_CHAR(100 * (1 - F.FREE / T.TOTAL), '90.00') "Used %"
FROM (SELECT TABLESPACE_NAME,
SUM(BYTES) / 1024 / 1024 TOTAL,
COUNT(*) DATAFILE#
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T,
(SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 FREE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE T.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1 ASC;
--------------------------------------------------查询表空间语句--------------------------------------------
--先查询正式库中的表空间大小
sql
SELECT T.TABLESPACE_NAME,
T.DATAFILE# "# of datafile",
TO_CHAR(T.TOTAL, '999,999,999,999') "Total (M)",
TO_CHAR(F.FREE, '999,999,999,999') "Free (M)",
TO_CHAR(100 * (1 - F.FREE / T.TOTAL), '90.00') "Used %"
FROM (SELECT TABLESPACE_NAME,
SUM(BYTES) / 1024 / 1024 TOTAL,
COUNT(*) DATAFILE#
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T,
(SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 FREE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE T.TABLESPACE_NAME = F.TABLESPACE_NAME
AND T.TABLESPACE_NAME NOT IN ('SYSAUX','SYSTEM','UNDOTBS1','USERS')
ORDER BY 1 ASC;
---
----有些表空间超过了32G,需要多加几个数据文件,可以用下面的查询
sql
SELECT FILE_NAME, TABLESPACE_NAME, BYTES / 1024 / 1024 AS "Total (M)"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME IN ('AUDITDATA',
'FRAME',
'IDX',
'IDX_HIS',
'LMIS',
'LMIS_HIS',
'P001',
'P002',
'P003',
'P004',
'P005',
'P006',
'P007',
'P008',
'WMS')
ORDER BY FILE_NAME
--------------------------------------------创建表空间的前的工作--------------------------------------------
--这4个表空间是数据库默认就有的不用创建
--SYSAUX SYSTEM UNDOTBS1 USERS
--对比你测试库和正式库的表空间,排除默认的表空间 SYSAUX SYSTEM UNDOTBS1 USERS,剩下的就是业务数据需要创建的表空间,文件路径自行定义更改
--AUDITDATA FRAME IDX IDX_HIS LMIS LMIS_HIS P001 P002 P003 P004 P005 P006 P007 P008 WMS
--AUDITDATA
----linux中改变目录的所有者和组 sudo chown oracle:oinstall /direstory#
sql
CREATE TABLESPACE AUDITDATA datafile '/u01/app/oracle/oradata/orcl/AUDITDATA.DBF' SIZE 1024M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--FRAME
create tablespace FRAME datafile '/u01/app/oracle/oradata/orcl/FRAME01.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--IDX
create tablespace IDX datafile '/u01/app/oracle/oradata/orcl/IDX01.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--IDX_HIS
create tablespace IDX_HIS datafile '/u01/app/oracle/oradata/orcl/IDX_HIS01.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--LMIS
create tablespace LMIS datafile '/u01/app/oracle/oradata/orcl/LMIS01.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--LMIS_HIS
create tablespace LMIS_HIS datafile '/u01/app/oracle/oradata/orcl/LMIS_HIS01.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P001
create tablespace P001 datafile '/u01/app/oracle/oradata/orcl/P001A.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P002
create tablespace P002 datafile '/u01/app/oracle/oradata/orcl/P002A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P003
create tablespace P003 datafile '/u01/app/oracle/oradata/orcl/P003A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P004
create tablespace P004 datafile '/u01/app/oracle/oradata/orcl/P004A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P005
create tablespace P005 datafile '/u01/app/oracle/oradata/orcl/P005A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P006
create tablespace P006 datafile '/u01/app/oracle/oradata/orcl/P006A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P007
create tablespace P007 datafile '/u01/app/oracle/oradata/orcl/P007A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--P008
create tablespace P008 datafile '/u01/app/oracle/oradata/orcl/P008A.DBF' SIZE 5120M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--WMS
create tablespace WMS datafile '/u01/app/oracle/oradata/orcl/WMS01.DBF' SIZE 30720M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
--这里是表空间的数据文件不够装数据之后需要手动添加数据文件或者更改数据文件大小(可以预先查看正式库的数据文件大小,多做几个数据文件)
--添加表空间
sql
alter tablespace IDX add datafile '/u01/app/oracle/oradata/orcl/IDX02.DBF' SIZE 30720M;
alter tablespace IDX_HIS add datafile '/u01/app/oracle/oradata/orcl/IDX_HIS02.DBF' SIZE 30720M;
alter tablespace IDX_HIS add datafile '/u01/app/oracle/oradata/orcl/IDX_HIS03.DBF' SIZE 30720M;
alter tablespace IDX_HIS add datafile '/u01/app/oracle/oradata/orcl/IDX_HIS04.DBF' SIZE 30720M;
alter tablespace WMS add datafile '/u01/app/oracle/oradata/orcl/WMS02.DBF' SIZE 30720M;
alter tablespace WMS add datafile '/u01/app/oracle/oradata/orcl/WMS03.DBF' SIZE 30720M;
alter tablespace WMS add datafile '/u01/app/oracle/oradata/orcl/WMS04.DBF' SIZE 30720M;
alter tablespace WMS add datafile '/u01/app/oracle/oradata/orcl/WMS05.DBF' SIZE 30720M;
alter tablespace LMIS_HIS add datafile '/u01/app/oracle/oradata/orcl/LMIS_HIS02.DBF' SIZE 30720M;
alter tablespace LMIS add datafile '/u01/app/oracle/oradata/orcl/LMIS02.DBF' SIZE 30720M;
alter tablespace P001 add datafile '/u01/app/oracle/oradata/orcl/P001B.DBF' SIZE 30720M;
alter tablespace P001 add datafile '/u01/app/oracle/oradata/orcl/P001C.DBF' SIZE 30720M;
(3)、创建用户及授权DBA角色权限,已经测试过不需要自行创建用户,导入之后会自动创建,密码和你被导入的库密码一样
(其实就是你导入了数据文件,这些用户就会自动创建)
sql
create user FRAME identified by frame default tablespace FRAME temporary tablespace TEMP profile DEFAULT;
grant dba to FRAME;
create user BAK identified by bak default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to BAK;
create user EXWMS identified by exwms default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to EXWMS;
create user EXWMS_DBLINK identified by exwms_dblink default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to EXWMS_DBLINK;
create user GGS identified by ggs default tablespace USERS temporary tablespace TEMP profile DEFAULT;
grant dba to GGS;
create user LC001 identified by lc001 default tablespace P001 temporary tablespace TEMP profile DEFAULT;
grant dba to LC001;
create user LC002 identified by lc002 default tablespace P002 temporary tablespace TEMP profile DEFAULT;
grant dba to LC002;
create user LC003 identified by lc003 default tablespace P003 temporary tablespace TEMP profile DEFAULT;
grant dba to LC003;
create user LC004 identified by lc004 default tablespace P004 temporary tablespace TEMP profile DEFAULT;
grant dba to lc004;
create user LC005 identified by lc005 default tablespace P005 temporary tablespace TEMP profile DEFAULT;
grant dba to LC005;
create user LC006 identified by lc006 default tablespace P006 temporary tablespace TEMP profile DEFAULT;
grant dba to LC006;
create user LC007 identified by lc007 default tablespace P007 temporary tablespace TEMP profile DEFAULT;
grant dba to LC007;
create user LC008 identified by lc008 default tablespace P008 temporary tablespace TEMP profile DEFAULT;
grant dba to LC008;
create user LMIS identified by lmisnettest default tablespace LMIS temporary tablespace TEMP profile DEFAULT quota unlimited on wms;
grant dba to LMIS;
create user LMIS_HIS identified by lmishis default tablespace LMIS_HIS temporary tablespace TEMP profile DEFAULT quota unlimited on lmis_his;
grant dba to LMIS_HIS;
create user LMIS_HYS identified by lmis_hys default tablespace LMIS temporary tablespace TEMP profile DEFAULT;
grant dba to LMIS_HYS;
create user RPT identified by rpt default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to RPT;
create user SCMY identified by scmy default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to SCMY;
create user SF_RSCD identified by sf_rscd default tablespace LMIS temporary tablespace TEMP profile DEFAULT;
grant dba to SF_RSCD;
create user TPL identified by tpl default tablespace WMS temporary tablespace TEMP profile DEFAULT quota unlimited on wms;
grant dba to TPL;
create user TPLSN identified by tplsn default tablespace WMS temporary tablespace TEMP profile DEFAULT quota unlimited on wms;
grant dba to TPLSN;
create user WCS identified by wcs default tablespace WMS temporary tablespace TEMP profile DEFAULT;
grant dba to WCS;
--# 创建数据泵目录
sql
---mkdir -p /u01/app/oracle/dmpdir
--chown oracle:oinstall /u01/app/oracle/dmpdir
---chmod 775 /u01/app/oracle/dmpdir
# 登录数据库创建目录对象
---sqlplus / as sysdba
---CREATE DIRECTORY CS_DMP AS '/u01/app/oracle/dmpdir';
--GRANT READ, WRITE ON DIRECTORY CS_DMP TO system;
sql
root 用户下将DMP_MEDATA.DMP组改成oracle,
sudo chown oracle:oinstall /u01/app/oracle/dmpdir/DMP_MEDATA.DMP
验证权限
ls -l /u01/app/oracle/dmpdir/DMP_MEDATA.DMP
输出应显示 oracle 为所有者:
-rw-r--r-- 1 oracle oinstall 106614784 Jan 14 17:05 /u01/app/oracle/dmpdir/DMP_MEDATA.DMP
导入数据 只能在oracle用户下执行
sql
impdp system/123123 directory=CS_DMP dumpfile=DMP_MEDATA.DMP full='Y'
--(5)、导入策略控制
--在正式库查看原有的策略
--SELECT * FROM dba_context
--在测试库对照生成策略
--在LMIS用户下执行,如果导入之前不自己建用户,默认会自动导入原有库的策略,可能不需要修改
sql
--create or replace context CTX_OWNERS using PKG_POLICY; /* create or replace context CTX_OWNERS using LMIS.PKG_POLICY;*/
--create or replace context CTX_OWNER using PKG_POLICY;
--create or replace context CTX_LC using PKG_POLICY;
--create or replace context CTX_DRUG_CATE using PKG_POLICY;
--(6)、修改用户默认策略密码过期不限制,如果原有库有用户策略,导入时也会自带,可能不需要修改
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
---授权指定包执行权限
sql
GRANT EXECUTE ON DBMS_RLS TO lmis ----这个就需要执行,上下文执行需要的
记得编译。