可以使用Oracle数据泵导入工具(IMPDP.EXE)使用REMAP_SCHEMA选项将一个模式导入另一个模式.但是,存在一个问题,即触发器未正确重新映射.这导致触发器根本没有创建错误,如下所示:
ORA-39083: Object type TRIGGER failed to create with error: ORA-00942: table or view does not exist Failing sql is: CREATE TRIGGER "**NEW_SCHEMA**"."METER_ALARMS_BI" BEFORE INSERT ON
**OLD_SCHEMA**.METER_ALARMS ...
Run Code Online (Sandbox Code Playgroud)
原因是因为create SQL仍然引用OLD_SCHEMA.它确实在Oracle文档中说:
映射可能不是100%完成,因为某些模式引用导入无法查找.例如,Import将找不到嵌入在类型,视图,过程和包的定义主体中的模式引用.
恕我直言,这是甲骨文的一个警察,但这是另一个讨论!
根据Oracle Metalink说明750783.1,解决方法是:
- 创建一个SQLFILE以包含相关的DDL命令:
impdp system/****** directory=test_dp
DUMPFILE=export_schemas.dmp
remap_schema=u1:u2 sqlfile=script.sql
Run Code Online (Sandbox Code Playgroud)
- 从写入的SQLFILE中提取受影响的DDL并更正模式引用.然后手动执行该命令.
这不是一个好方法,特别是如果你有许多失败的对象,并希望自动化组合多个模式的过程,以便在数据库的字段升级.
有没有人找到更好的方法来做到这一点?如果要在现场使用,我需要一个必须100%可靠的解决方案.我可以解析生成的SQL文件,但可以100%正确吗?是否有一些方法可以拦截IMPDP执行的CREATE SQL语句并在导入时动态更正?可以直接修补DMP文件吗?
我正在编写一个汇编信息应用程序,用于我们的软件构建过程,并尝试从已签名的.Net程序集中读取数字签名信息.
我想在我的C#代码中执行Windows资源管理器可以通过右键单击已签名的程序集并选择"数字签名"选项卡然后单击"详细信息"按钮来执行的操作.例如
有没有人知道如何在C#中以编程方式执行此操作?我目前正在使用Mono Cecil库从程序集中获取其余信息.非常感谢您的帮助.
C#代表一直很难掌握,所以我很高兴偶然发现了逻辑学家关于代码项目网站上标题为"C#代表:一步一步"的文章.他有一种非常简洁的方式来解释C#代表,我可以推荐给你.但是,在尝试示例时,我发现有两种方法可以初始化委托,主要是:
//create a new instance of the delegate class
CalculationHandler sumHandler1 = new CalculationHandler(math.Sum);
//invoke the delegate
int result = sumHandler1(8, 9);
Console.WriteLine("Result 1 is: " + result);
Run Code Online (Sandbox Code Playgroud)
和
CalculationHandler sumHandler2 = math.Sum;
//invoke the delegate
int result = sumHandler2(8, 9);
Console.WriteLine("Result 2 is: " + result);
Run Code Online (Sandbox Code Playgroud)
将数学类定义为
public class math
{
public int Sum(int x, int y)
{
return x + y;
}
}
Run Code Online (Sandbox Code Playgroud)
那么"正确"的方式是什么?为什么?
除了显而易见的,有人可以解释多列分区和使用子分区之间有什么不同吗?哪一个更适合OLTP场景?有关详细信息,请参阅"Oracle数据库管理员指南"中的" 管理分区表和索引 ".
在多列上分区的表的(哑)示例是:
CREATE TABLE demo1
(
year NUMBER,
month NUMBER,
day NUMBER,
instance NUMBER, /* assuming this can only be 1 or 2 */
other1 VARCHAR2(50),
other2 VARCHAR2(50),
other3 VARCHAR2(50)
)
PARTITION BY RANGE (year,instance)
(
PARTITION data_2009_inst1 VALUES less than (2009,2) TABLESPACE data_2009,
PARTITION data_2009_inst2 VALUES less than (2009,3) TABLESPACE data_2009,
PARTITION data_2010_inst1 VALUES less than (2010,2) TABLESPACE data_2010,
PARTITION data_2010_inst2 VALUES less than (2010,3) TABLESPACE data_2010,
PARTITION data_2011_inst1 VALUES less than (2011,2) TABLESPACE data_2011,
PARTITION data_2011_inst2 …
Run Code Online (Sandbox Code Playgroud) 这是场景(简化示例):
我有一个名为ABC的Oracle用户/架构.ABC拥有一张叫做TRN的桌子.客户端代码以ABC形式连接到数据库,并从ABC.TRN中选择.
到现在为止还挺好.但是,我不希望客户端代码指定Oracle模式名称.现在我想我已经删除了引用模式的客户端代码中的所有引用,但我想测试它以确保.
所以我想创建一个名为DEF的新用户/模式,客户端将使用它来连接数据库.当客户端应用程序从ABC.TRN中选择时,它必须给出错误.但是,如果客户端应用程序从TRN(无模式名称)中选择,则它必须返回数据.
有办法做到这一点吗?请注意,DEF必须与ABC在同一个数据库中,只有一个表TRN表(由ABC拥有),我不能使用数据库链接.
我尝试创建一个新的XYZ用户,其同义词指向ABC.TRN并赋予它对ABC.TRN的选择权限.然后我创建了DEF用户,其同义词指向XYZ.TRN,并且给予DEF对XYZ.TRN的选择权限.这很有效但是Oracle很聪明地知道如果DEF有权从XYZ.TRN中选择,那么它也有权从ABC.TRN中进行选择,从而违背了本练习的目的,因为我希望这个案例给出错误.
给你...
是否存在类似于.net中的数据提供程序使用的标准连接池模型(或API),我可以使用它来实现自己的连接池?
我问,因为我需要将我自己的连接池实现到我们在Web服务中使用的专有TCP/IP设备.当前的问题是由于在IIS下运行的Web服务的线程性质,设备有很多连接(读取太多).我想使用我自己的连接池来限制这些连接的数量,如果有一个我可以使用的标准模型,重新发明轮子似乎很愚蠢.
这是一个非常漂亮的窗口,其中显示了引用类的内容,即“ CodeLens引用”窗口。您可以通过单击类名称上方的引用链接并选择“停靠弹出窗口”图标来获得它。看起来像:
现在如何将该窗口的内容保存到文本文件?没有菜单,尝试过Window-text-grabber应用程序,没有运气。希望有一个VS插件可以提供帮助,但找不到。
V.
我已经开发了一个"对象池",如果不使用Thread.Sleep()这似乎是不行的,这是我认为的"坏习惯".
这与我的另一个问题" 是否存在在.net中实现专有连接池的标准方法 "有关.对象池背后的想法类似于用于数据库连接的连接池背后的想法.但是,在我的情况下,我使用它来共享标准ASP.NET Web服务(在IIS6中运行)中的有限资源.这意味着许多线程将请求访问此有限资源.池会抛出这些对象("Get"),一旦使用了所有可用的池对象,下一个请求一个的线程就会等待一段时间让这些对象中的一个再次可用(一个线程可以做)一旦对象完成"放置".如果对象在此设置时间内不可用,则会发生超时错误.
这是代码:
public class SimpleObjectPool
{
private const int cMaxGetTimeToWaitInMs = 60000;
private const int cMaxGetSleepWaitInMs = 10;
private object fSyncRoot = new object();
private Queue<object> fQueue = new Queue<object>();
private SimpleObjectPool()
{
}
private static readonly SimpleObjectPool instance = new SimpleObjectPool();
public static SimpleObjectPool Instance
{
get
{
return instance;
}
}
public object Get()
{
object aObject = null;
for (int i = 0; i < (cMaxGetTimeToWaitInMs / cMaxGetSleepWaitInMs); i++)
{
lock (fSyncRoot)
{ …
Run Code Online (Sandbox Code Playgroud)