OVH Cloud OVH Cloud

Pb Jobs

5 réponses
Avatar
Alex
Bonjour,
Comment créer un job pour vider une Table quand aucun utilisateur est
connecté à cette Base?
Merci

5 réponses

Avatar
bruno reiter [MVP]
programmer le job toutes les minutes de telle à telle heure

utiliser une fonction pour voir les users connectés à la base :

/*
fonction pour voir le nombre d'utilisateurs connectés à une DB
*/
CREATE FUNCTION dbo.UDF_USER_ON_DB
(@dbname sysname)
RETURNS int
AS
BEGIN

DECLARE @nbuser int

SELECT @nbuser=count(*) FROM MASTER..SYSPROCESSES a
JOIN MASTER..SYSDATABASES b
ON a.dbid = b.dbid
WHERE b.name = @dbname

RETURN @nbuser

END
GO

SELECT dbo.UDF_USER_ON_DB ('northwind')
GO

/*
fonction pour voir le nombre de connexions
par utilisateurs connectés à une DB
*/
CREATE FUNCTION dbo.UDF_CNX_USER_ON_DB
(@dbname sysname)
RETURNS TABLE
AS
RETURN
SELECT 'login name'=a.loginame, 'nb connexions'=count(*) FROM
MASTER..SYSPROCESSES a
JOIN MASTER..SYSDATABASES b
ON a.dbid = b.dbid
WHERE b.name = @dbname
GROUP BY a.loginame

GO

SELECT * FROM [Northwind].[dbo].[UDF_CNX_USER_ON_DB] ('northwind')
GO

/*
DROP FUNCTION dbo.UDF_USER_ON_DB

DROP FUNCTION dbo.UDF_CNX_USER_ON_DB
*/


br

"Alex" wrote in message
news:
Bonjour,
Comment créer un job pour vider une Table quand aucun utilisateur est
connecté à cette Base?
Merci




Avatar
Alex
Merci pour ton aide mais j'ai un petit soucis quand même
J'ai créé une procédure stockée qui supprime le contenu de ma table si
il y a plus d'utilisateur connecté (ça marche!)

Donc dans le Job j'ai créé un step
et en command :
Exec BASE.dbo.ProcStockee

Cependant le job s'exécute (Last Run Status= Succeeded) mais la procédure
non!

Que faire ?





"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news: %
programmer le job toutes les minutes de telle à telle heure

utiliser une fonction pour voir les users connectés à la base :

/*
fonction pour voir le nombre d'utilisateurs connectés à une DB
*/
CREATE FUNCTION dbo.UDF_USER_ON_DB
(@dbname sysname)
RETURNS int
AS
BEGIN

DECLARE @nbuser int

SELECT @nbuser=count(*) FROM MASTER..SYSPROCESSES a
JOIN MASTER..SYSDATABASES b
ON a.dbid = b.dbid
WHERE b.name = @dbname

RETURN @nbuser

END
GO

SELECT dbo.UDF_USER_ON_DB ('northwind')
GO

/*
fonction pour voir le nombre de connexions
par utilisateurs connectés à une DB
*/
CREATE FUNCTION dbo.UDF_CNX_USER_ON_DB
(@dbname sysname)
RETURNS TABLE
AS
RETURN
SELECT 'login name'=a.loginame, 'nb connexions'=count(*) FROM
MASTER..SYSPROCESSES a
JOIN MASTER..SYSDATABASES b
ON a.dbid = b.dbid
WHERE b.name = @dbname
GROUP BY a.loginame

GO

SELECT * FROM [Northwind].[dbo].[UDF_CNX_USER_ON_DB] ('northwind')
GO

/*
DROP FUNCTION dbo.UDF_USER_ON_DB

DROP FUNCTION dbo.UDF_CNX_USER_ON_DB
*/


br

"Alex" wrote in message
news:
Bonjour,
Comment créer un job pour vider une Table quand aucun utilisateur est
connecté à cette Base?
Merci








Avatar
Philippe T [MS]
Bonjour,

Et avec :

USE BASE
EXEC dbo.ProcStock

L'utilisateur exécutant le job doit aussi avoir les droits nécessaires.

Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Alex" wrote in message
news:#
Merci pour ton aide mais j'ai un petit soucis quand même
J'ai créé une procédure stockée qui supprime le contenu de ma table si
il y a plus d'utilisateur connecté (ça marche!)

Donc dans le Job j'ai créé un step
et en command :
Exec BASE.dbo.ProcStockee

Cependant le job s'exécute (Last Run Status= Succeeded) mais la procédure
non!

Que faire ?





"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: %
> programmer le job toutes les minutes de telle à telle heure
>
> utiliser une fonction pour voir les users connectés à la base :
>
> /*
> fonction pour voir le nombre d'utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_USER_ON_DB
> (@dbname sysname)
> RETURNS int
> AS
> BEGIN
>
> DECLARE @nbuser int
>
> SELECT @nbuser=count(*) FROM MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
>
> RETURN @nbuser
>
> END
> GO
>
> SELECT dbo.UDF_USER_ON_DB ('northwind')
> GO
>
> /*
> fonction pour voir le nombre de connexions
> par utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_CNX_USER_ON_DB
> (@dbname sysname)
> RETURNS TABLE
> AS
> RETURN
> SELECT 'login name'=a.loginame, 'nb connexions'=count(*) FROM
> MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
> GROUP BY a.loginame
>
> GO
>
> SELECT * FROM [Northwind].[dbo].[UDF_CNX_USER_ON_DB] ('northwind')
> GO
>
> /*
> DROP FUNCTION dbo.UDF_USER_ON_DB
>
> DROP FUNCTION dbo.UDF_CNX_USER_ON_DB
> */
>
>
> br
>
> "Alex" wrote in message
> news:
>> Bonjour,
>> Comment créer un job pour vider une Table quand aucun utilisateur est
>> connecté à cette Base?
>> Merci
>>
>>
>
>




Avatar
bruno reiter [MVP]
as-tu regardé le détail de l'historique du job?

la proc fonctionne-t'elle dans QA? à partir de quelle base?

br


"Alex" wrote in message
news:#
Merci pour ton aide mais j'ai un petit soucis quand même
J'ai créé une procédure stockée qui supprime le contenu de ma table si
il y a plus d'utilisateur connecté (ça marche!)

Donc dans le Job j'ai créé un step
et en command :
Exec BASE.dbo.ProcStockee

Cependant le job s'exécute (Last Run Status= Succeeded) mais la procédure
non!

Que faire ?





"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: %
> programmer le job toutes les minutes de telle à telle heure
>
> utiliser une fonction pour voir les users connectés à la base :
>
> /*
> fonction pour voir le nombre d'utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_USER_ON_DB
> (@dbname sysname)
> RETURNS int
> AS
> BEGIN
>
> DECLARE @nbuser int
>
> SELECT @nbuser=count(*) FROM MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
>
> RETURN @nbuser
>
> END
> GO
>
> SELECT dbo.UDF_USER_ON_DB ('northwind')
> GO
>
> /*
> fonction pour voir le nombre de connexions
> par utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_CNX_USER_ON_DB
> (@dbname sysname)
> RETURNS TABLE
> AS
> RETURN
> SELECT 'login name'=a.loginame, 'nb connexions'=count(*) FROM
> MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
> GROUP BY a.loginame
>
> GO
>
> SELECT * FROM [Northwind].[dbo].[UDF_CNX_USER_ON_DB] ('northwind')
> GO
>
> /*
> DROP FUNCTION dbo.UDF_USER_ON_DB
>
> DROP FUNCTION dbo.UDF_CNX_USER_ON_DB
> */
>
>
> br
>
> "Alex" wrote in message
> news:
>> Bonjour,
>> Comment créer un job pour vider une Table quand aucun utilisateur est
>> connecté à cette Base?
>> Merci
>>
>>
>
>




Avatar
Alex
J'ai trouvé mon erreur :
ma procédure s'exécutée si aucun user était connecté, et j'avais oublié
d'exclure en tant que user le programme OSQL-32

Merci pour votre aide

"bruno reiter [MVP]" <remove.this! a écrit dans le message
de news:
as-tu regardé le détail de l'historique du job?

la proc fonctionne-t'elle dans QA? à partir de quelle base?

br


"Alex" wrote in message
news:#
Merci pour ton aide mais j'ai un petit soucis quand même
J'ai créé une procédure stockée qui supprime le contenu de ma table
si
il y a plus d'utilisateur connecté (ça marche!)

Donc dans le Job j'ai créé un step
et en command :
Exec BASE.dbo.ProcStockee

Cependant le job s'exécute (Last Run Status= Succeeded) mais la procédure
non!

Que faire ?





"bruno reiter [MVP]" <remove.this! a écrit dans le


message
de news: %
> programmer le job toutes les minutes de telle à telle heure
>
> utiliser une fonction pour voir les users connectés à la base :
>
> /*
> fonction pour voir le nombre d'utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_USER_ON_DB
> (@dbname sysname)
> RETURNS int
> AS
> BEGIN
>
> DECLARE @nbuser int
>
> SELECT @nbuser=count(*) FROM MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
>
> RETURN @nbuser
>
> END
> GO
>
> SELECT dbo.UDF_USER_ON_DB ('northwind')
> GO
>
> /*
> fonction pour voir le nombre de connexions
> par utilisateurs connectés à une DB
> */
> CREATE FUNCTION dbo.UDF_CNX_USER_ON_DB
> (@dbname sysname)
> RETURNS TABLE
> AS
> RETURN
> SELECT 'login name'=a.loginame, 'nb connexions'=count(*) FROM
> MASTER..SYSPROCESSES a
> JOIN MASTER..SYSDATABASES b
> ON a.dbid = b.dbid
> WHERE b.name = @dbname
> GROUP BY a.loginame
>
> GO
>
> SELECT * FROM [Northwind].[dbo].[UDF_CNX_USER_ON_DB] ('northwind')
> GO
>
> /*
> DROP FUNCTION dbo.UDF_USER_ON_DB
>
> DROP FUNCTION dbo.UDF_CNX_USER_ON_DB
> */
>
>
> br
>
> "Alex" wrote in message
> news:
>> Bonjour,
>> Comment créer un job pour vider une Table quand aucun utilisateur est
>> connecté à cette Base?
>> Merci
>>
>>
>
>