扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、由于oracle运行在Linux系统里面,第一步,我们要连接Linux系统。
为韩城等地区用户提供了全套网页设计制作服务,及韩城网站建设行业解决方案。主营业务为成都网站制作、成都网站设计、韩城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
2、然后我们转换到oracle安装用户里面。 我的是 oracle。
3、然后我们运行oracle的环境里的变量, 用来输入相关命令。
4、进去oracle的控制台。输入一个命令: sqlplus / as sysdba。
5、如果要启动数据库,就输入命令: startup。
6、如果关闭数据库, 就输入命令: shutdown immediate。
在服务中直接停止即可。
1、以windows10为例,右键“此电脑”,选择“管理”。
2、然后选择“服务和应用程序”——“服务”。
3、找到oracle的服务,一般名称为oracleservice+实例名。
4 、右键,选择停止,等待执行完毕即可。
禁用oracle 的 XDB服务的方法很简单,去掉相应的数据库的初始化参数即可: 编辑$ORACLE_HOME/dbs/initSID.ora文件,去除如下行: dispatchers='(PROTOCOL=TCP) (SERVICE=XDB)'重启数据库 shutdown immediate; create spfile from pfile; startup;修改XDB服务端口: XDB的http服务就占用8080端口,刚好和JBoss、Tomcat等默认端口冲突,Oracle XDB的端口设置不在配置文件中,而是在数据库里。如下修改XDB的http和ftp服务端口: 使用sys登录sqlplus,利用dbms_xdb修改端口设置 SQL -- Change the HTTP /WEBDAV port from 8080 to 8081 SQL call dbms_xdb.cfg_update(updateXML( 2 dbms_xdb.cfg_get() 3 , '/xdbconfig/sysconfig/protocolconfig /httpconfig/http-port/text()' 4 , 8081)) 5 / Call completed. SQL -- Change the FTP port from 2100 to 2111 SQL call dbms_xdb.cfg_update(updateXML( 2 dbms_xdb.cfg_get() 3 , '/xdbconfig/sysconfig/protocolconfig /ftpconfig/ftp-port/text()' 4 , 2111)) 5 / Call completed. SQL COMMIT; Commit complete. SQL EXEC dbms_xdb.cfg_refresh; PL/SQL procedure successfully completed.(责任编辑:卢兆林)
1、ORACLE数据库中的外键约束名都在表user_constraints中可以查到。其中constraint_type='R'表示是外键约束。
2、启用外键约束的命令为:alter
table
table_name
enable
constraint
constraint_name
3、禁用外键约束的命令为:alter
table
table_name
disable
constraint
constraint_name
4、然后再用SQL查出数据库中所以外键的约束名:
select
'alter
table
'||table_name||'
enable
constraint
'||constraint_name||';'
from
user_constraints
where
constraint_type='R'
select
'alter
table
'||table_name||'
disable
constraint
'||constraint_name||';'
from
user_constraints
where
constraint_type='R'
特总结了Oracle和DB2数据库下如何禁用外键约束的方法。
一、Oracle数据库:
禁用约束基本语法:
alter table 数据库表名 disable constraint 约束名
假设现在需要关闭pub_organ的外键约束:
1、 首先查询pub_organ存在哪些外键约束,此时需要用到oracle的字典表user_constraints。
select * from user_constraints where table_name='PUB_ORGAN';
上图就是查询结果,其中各字段含义如下:
OWNER: 表的所有者
CONSTRAINT_NAME: 约束名称
CONSTRAINT_TYPE: 约束类型(R代表外键,P代表主键,C代表check约束)
TABLE_NAME: 表名称
SEARCH_CONDITION: check约束的具体信息
STATUS: ENABLED表示当前约束是启用的,DISABLED表示当前约束未启用。
2、 查询出表存在哪些约束后,即可以通过alter语句启用或禁用指定的约束了。
如禁用pub_organ表的外键PUBORGAN_FK1,则可以使用如下命令实现:
alter table PUB_ORGAN disable constraint PUBORGAN_FK1;
执行后,再次查询字典表user_constraints,如下:
此时往数据库表pub_organ中插入数据时就不再受外键约束的影响了。
启用约束基本语法:
alter table 数据库表名 enable constraint 约束名
如现在需要重新启用pub_organ的外键约束,可以使用如下命令:
alter table PUB_ORGAN enable constraint PUBORGAN_FK1;
二、DB2数据库:
禁用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 NOT ENFORCED
启用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 ENFORCED
相关字典表:SYSIBM.SYSTABCONST
如:select * from SYSIBM.SYSTABCONST where tbname='PUB_ORGAN';
各字段含义如下:
NAME: 约束名称
DEFINER: 定义者
CONSTRAINTTYP: 约束类型(P代表主键,F代表外键)
TBNAME: 表名称
ENFORCED: 是否启用(Y代表启用,N代表未启用)
三、封装成java接口、批量执行
在实际工作中,经常会将若干个表,或者所有数据库表的外键一起禁用,此时需要批量执行相关命令,笔者根据工作实际,使用java封装了相关接口,以方便使用。
对外暴露接口如下:
/*
* 启用当前用户指定tableName的所有外键约束
* 入参使用可变参数(jdk5新特性)
* 调用方式:
* 1、enableFK("pub_organ")
* 2、enableFK("pub_organ","pub_stru")
* 3、enableFK(new String[]{"pub_organ","pub_stru"})
*/
public static void enableFK(String...tableNames){
disableORenbaleFK(true,tableNames);
}
/*
* 禁用当前用户指定tableName的所有外键约束
*/
public static void disableFK(String...tableNames){
disableORenbaleFK(false,tableNames);
}
/*
* 启用当前用户所有表的外键约束
*/
public static void enableAllFK(){
disableORenableAllConstraint(true);
}
/*
* 禁用当前用户所有表的外键约束
*/
public static void disableAllFK(){
disableORenableAllConstraint(false);
}
其中核心处理代码如下:
if(tableNames==null||tableNames.length==0){
throw new RuntimeException("入参tableNames不能为空!");
}
//查询指定表的外键约束
String sql = null;
String dbType = getDBType();
if(dbType.contains("ORACLE")){
sql = "select 'alter table ' || table_name || ' disable constraint ' || constraint_name from user_constraints where constraint_type='R' and TABLE_NAME in(";
if(isEnable){
sql = sql.replace("disable", "enable");
}
}else if(dbType.contains("DB2")){
sql = "select 'ALTER TABLE ' || TBNAME || ' ALTER FOREIGN KEY ' || NAME ||' NOT ENFORCED ' FROM SYSIBM.SYSTABCONST WHERE CONSTRAINTYP='F' and TBNAME in(";
if(isEnable){
sql = sql.replace("NOT ENFORCED", "ENFORCED");
}
}else{
throw new RuntimeException("数据库类型无效(仅支持Oracle和DB2),dbType="+dbType);
}
StringBuffer generateSQL = new StringBuffer(sql);
for(int i=0;itableNames.length;i++){
generateSQL.append(" '");
generateSQL.append(tableNames[i].toUpperCase());//注意须转换成大写
generateSQL.append("',");
}
generateSQL.deleteCharAt(generateSQL.length()-1);
generateSQL.append(")");
ListMapString, Object dataSet = DBTool.executeQuery(generateSQL.toString());
//启用or停止查询出的外键约束
for(int i=0;idataSet.size();i++){
MapString, Object record = dataSet.get(i);
IteratorEntryString, Object itor = record.entrySet().iterator();
while(itor.hasNext())
{
EntryString, Object e = itor.next();
DBTool.executeUpdate(e.getValue().toString(),UpdateType.ALTER);
}
}
在Oracle 10g中,AWR采样缺省部署于数据库中,那么如何禁用这个功能呢?
在Metalink Note: 436386.1中,Oracle提供了一个增强脚本,称为: dbmsnoawr.plb 通过这个脚本可以启用和禁用AWR采样功能,从原则上,为未购买该部分功能授权的用户提供了一个退出途径。
在Oracle Database 11g中,可以通过参数CONTROL_MANAGEMENT_PACK_ACCESS 控制组件包的访问。
该脚本的内容如下:
Rem Rem dbmsnoawr.sql Rem Rem Copyright (c) 2006, Oracle. All rights reserved. Rem Rem NAME Rem dbmsnoawr.sql - Declaration of the DBMS_AWR package Rem Rem DESCRIPTION Rem Utilities for disabling and getting status of AWR Rem Rem NOTES Rem Rem MODIFIED (MM/DD/YY) Rem gwood 04/13/07 - created Rem create or replace package dbms_awr as -- PACKAGE dbms_awr -- This package allows users to disable AWR functionality in a Oracle 10g+ database. -- The use of this package is not resticted by licencing of the Diagnostic Pack. -- Additionally this package contains two functions that can be used to determine -- if AWR is currently enabled. -- -- PROCEDURE dbms_awr.disable_awr -- PURPOSE: turns off collections into Automatic Workload Repository -- PARAMETERS: none procedure disable_awr; -- PROCEDURE dbms_awr.enable_awr -- PURPOSE: turns on collections into Automatic Workload Repository. The capture interval -- is set to the default of 60 minutes. -- PARAMETERS: none procedure enable_awr; -- FUNCTION dbms_awr.awr_enabled -- PURPOSE: Returns TRUE if Automatic Workload Repository is performing periodic capture. -- Returns FALSE if Automatic Workload Repository periodic capture is disabled. -- PARAMETERS: none function awr_enabled return boolean; -- FUNCTION dbms_awr.awr_status -- PURPOSE: Returns 'ENABLED' if Automatic Workload Repository is performing periodic capture. -- Returns 'DISABLED' if Automatic Workload Repository periodic capture is disabled. -- PARAMETERS: none function awr_status return varchar2; end dbms_awr; / create or replace package body dbms_awr wrapped a000000 b2 abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd b 27b 1de XeDco+SpVfG9KEZ2ikXc00yhW88wg2P3AK7bfHRAWE7VX0b1S25KKJCp5VrehjNR9oaXoWT1 GGfYVnyl/lLyux308Fmhfp1y9pjrQyux50RY8xmHmiSG2bFbFs2Upn6MLYcfsqsW+joOTKYe 4TyFpXVqzVWS+Tjt8bcmSiai64IVcdOB3Q7Y6kQ8PGwqXqAiy9sFQKD0X6RC/ePGAQzUKwvS 3L8/hKgjdK9Fgw8bb7v1HTq22OJlAv+R/DYCSK57rPmAkyx/XLuXcPo3hcYs8fvUUAO33szW gy5zNau9U7xiyAOExBz9Vh0U7EaMRl6rLr6UXpk/0tk3BW0W/GVo3XfdSzUpGN5aKa1xF2Yh trcMV3KuK/FfIpy0bNDxSQ3LFuOsB8i5xzhj/dCqMxT4dO2awc0hnP3XeLhxWDvcEuqdkR9O u+Z6US/LtRISXt2I8zFq6/aDSuOXTor9KQ1jYA== /
该脚本包含两个过程和两个函数,通过disable_awr / enable_awr 就可以禁用或者启用AWR采样功能:
SQL @D:dbmsnoawr.plb
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流