Hardware capability for FIM Reporting

I am doing some capacity planning for a FIM 2010 R2 deployment and trying to understand the hardware requirements for the Reporting feature. Based on the diagarm below, it looks like the performance is primarily driven by two factors: System
Center and SQL. Even the performance of System Center depends on SQL. So it all comes down to SQL horsepower. The rest of the servers (FIM, SCSM, SCDW) may not need much muscle power (I might be wrong though). What is your experience when planning
for Reporting? What kind of challenges one can experience? Btw, I have a userbase of 100K and the change rate (# of requests per day) I am expecting is about 6%. What kind of hardware capacity would you recommend?
Thanks!

To start with, the picture is indeed really great … but it’s missing (or not emphasizing enough) one important component – SCSM’s Service Manager database.
As for the capacity question, we've seen the biggest impact/load on the SCCM databases, both Service Manager and Data Warehouse (mainly DWStagingAndConfig) – so yes, SQL is what
drives all that. Also, we haven’t tried SP1 yet, so what we observed was still on SCCM 2010.
Anyway, here are few pointers from our experience:
1. SCSM Service Manager DBs and Data Warehouse DBs should be installed on different SQL instances (has to do with the nature of the DBs) and preferably on different SQL servers.
And ideally separately from other FIM component DBs.
2. SCSM Service Manager DB can easily grow over twice the size of your FIMService DB (with indexes taking a lot of space), and it’s transaction log can quickly reach crazy sizes
especially during initial load. This is the experience from running it just for few months, it might change after longer usage.
3. From SCSM Data Warehouse DBs the only one you need to worry about is the DWStagingAndConfig. In our environment size wise it was comparable to FIM Service DB, but the observed
IO during ETL jobs was just crazy – I’ve seen graphs of it generating 300-400MB/s read IO on a 150GB DB for over 10h straight (with plenty of RAM on the SQL box).
4. Overall it seems like latency to the DB files is one of the main factors driving performance of FIM Reporting (not to mention IO) – even to a point where SAN storage might
not be the best option here. Like Tomasz wrote, we were looking at setting up both SCSM components on two dedicated physical servers with local SQL and DBs on SSD drives … but didn’t get that far yet.
When I’m writing about FIM Reporting performance I’m referring to a number of individual changes (queued in the ExportLog table in the FIM Service DB) that can be extracted from
FIM Service to Service Manager in an hour – initially we were able to process below 200k records per hour, and after several tweaks, SAN reconfiguration, etc, we were almost able to double it. There isn’t any average correlation between number of requests
and number of entries in the ExportLog table, it all depends on type of changes and how many are a part of individual requests. To just to give you an idea, we observed 20M records that were added over a 7 day period (avg 120k per hour), during which the only
activity on FIM Service were approximately 20k SSPR registrations – highly customized (with confirmation emails flying around and some custom attributes being set), but still just SSPR. As you can imagine, with that level of activity we needed to push the
processing rate way over what we were seeing as FIM Reporting was barely being able to catch up in real time.
I hope this will be at least a bit helpful
J.
Piotr
P.S. Oh, and by "we" I mean my previous company, I recently moved to Microsoft.

Similar Messages

  • Unable to run FIMPostInstallScriptsForDataWarehouse for FIM Reporting

    Hi Everyone,
    I am configuring FIM Reporting in which initially I installed scsm 2012 r2 which was not supported and after the uninstallation I installed scsm 2012 sp1,after the installation of scsm management server 2012 sp1 and dataware house when I am running the "FIMPostInstallScriptsForDataWarehouse"
    script it says the following error message in the first screen and when I am trying to install the snappins then it says me to delete this existing files in the second screen.
    My question is how and where should go I go and delete that exisiting snappins so that the script can run. please find the below screen shots
    +

    Hi,
    Can you check payroll status of the mentioned employees in PA30. (IT0003)
    See whether employee number has been locked for payroll or there are dates in the fields for retroactive calculation etc.
    Regards;
    Okan

  • FIM Reporting ETLScript PowerShell Script for SCSM 2012?

    Hi,
    The FIM Reporting Deployment Guide is great, however on a few occasions it forgets to mention where you meant to execute things (http://technet.microsoft.com/en-us/library/jj133855(v=ws.10).aspx) .
    For example, if it wasn't for the screenshot in the article, we would not have known that we need to run the ETLScript from the FIM Service/Portal server.
    Everything until the ETLScript has thus far worked; and we have deployed the Service Manager 2012 console on the FIM Service/Portal server (since we are using SCSM 2012 for FIM Reporting).
    However, it appears that the ETLScript (in the deployment guide) has been written for SCSM 2010.
    So, has Microsoft or anyone published an updated SCSM 2012 ETLScript script?
    Thanks,
    SK

    Could this be it?
    http://gallery.technet.microsoft.com/PowerShell-Script-to-Run-a4a2081c

  • Hardware requirements for Reports 6i server

    Hi,
    I would like to know what are the hardware requirements for installing Reports 6i server. We we would like to deploy all reports through the web and expect a maximum of 50 users to fire reports at any given time during the day.
    Any help will be very much appreciated.
    Thanks.

    Hi Umesh. You need to read this http://service.sap.com/ides .Download  the documentation to that version which it is pleasant to you and in it there will be all corresponding information about hardware and e.t.c.
    Regards.

  • FIM Reporting and SQL collation

    In our existing FIM 2010 R2 implementation, we used the default collation of SQL 2008 R2, which is SQL_Latin1_General_CP1_CI_AS.
    However, reading some articles, I got the impression that SQL server will need to be installed with Latin1_General_100_CI_AS collation for installing System Center 2012. I also read that FIM Service database will need to be in the same collation
    (i.e. Latin1_General_100_CI_AS). This means we will need to rebuild the SQL server for FIM service.
    However, reading the following article, I get a different impression. As long as the collation across all the SQL servers is the same, we should be good. Also, it is actually recommended to use SQL_Latin1_General_CP1_CI_AS rather than Latin1_General_100_CI_AS.
    In fact, The SCOM data warehouse installer will always install the data warehouse with SQL_Latin1_General_CP1_CI_AS regardless of the SQL Server collation.
    http://blogs.technet.com/b/servicemanager/archive/2012/05/24/clarification-on-sql-server-collation-requirements-for-system-center-2012.aspx
    Can anybody please confirm the requirement?

    Thanks Brian
    I am planning to put ALL FIM roles onto two nodes behind F5. I understand that FIM reporting has to be installed with FIMservice so yes I want to install FIM reporting role onto both FIMService nodes. I understand that I CAN do this from your response (thankyou)
    because "there's a safeguard in place to ensure that only one server processes the reporting jobs at a time if it's enabled on more than one FIM Service server
    Can you explain what or how this safeguard works - specifically which FIMService node will run this and how the other FIMService node (2) will pick up the job if the first FIMService (node 1 )fails - do I have to configure anything ?
    Brian- with respect ; is Tomek's reply incorrect in the context of my configuration - otherwise I would need a standalone FIM Service server (not part of the F5 virtual server) running Reporting with no FIM reporting HA (beyond Hyper-V or other single node
    HA options) ?
    I realllllyyyy appreciate this feedback and discussion as I have found very little w3 or forum information about load balancing and HA for FIM reporting (I don't mean the SCSM or DW components)
    Thanks again
    Nigel

  • Reports for FIM 2010 SSPR

    Hi,
    I am looking to draw reports on SSPR to show the ROI etc.
    Is this possible and any pointers
    e.g.
    How many users have registered
    On which date did the user register
    How many users have used the password reset functionality successfully. (Successfully reset their AD password)
    Date when the user reset his password (if used)
    How many resets were done on a day (e.g. today)
    Any other useful report on SSPR that might be available 
    Thanks,

    You can use Powershell data provider for SQL reporting services - http://psdpe.codeplex.com/- and then make reports based on requests in your FIM instance. FIM powershell module might also be handy:
    http://fimpowershellmodule.codeplex.com/
    If you don't want to use SSPR you can still use FIM Powershell to export data and present it as you want. 
    Tomek Onyszko, memberOf Predica FIM Team (http://www.predica.pl), IdAM knowledge provider @ http://blog.predica.pl

  • Minimum hardware requirement for Report server with 4 engines ??

    Hello all ,
    Can someone please tell what is the minimun Hardware requirement to be able to run a Oracle 91 AS with report server having 4 engines ??
    and where I can find this kind of documentation.
    We have a Oracle9iAS Containers for J2EE running on a machine with under 1 ghz power and around 300 mb RAM
    , but the report server seems to keep crashing ..
    Can anyone pls advice
    Thanks

    Hi,
    For calculating the minimum hardware requirements, you may need to look at various factors:
    1. No of reports requests that need to be processed per second
    2. Whether all these requests are synchronous or asynchronous
    3. Response time required
    4. Type of reports - large amounts of data, large no of images, etc
    5. How much caching you are using
    6. No of queries in your report
    7. Simple / complex layout of the report
    and so on.
    So just the information of 4 engines may not be sufficient for trying to calculate the hardware requirements. One useful reference point for you may be the Oracle9i Reports Scalability whitepaper:
    http://otn.oracle.com/products/reports/index.html
    It lists the number of users supported on some pre-defined hardware configurations, and the average response time for the reports server.
    You might also want to take a look at the paper on "Tuning Oracle Reports":
    http://otn.oracle.com/products/reports/htdocs/search.html?cat=SAP&col=ALC&submit=Search
    However, it is also possible that your Reports Server is crashing due to some other problem (not the hardware configuration).
    By the way, your RAM seems to be too low for Oracle9iAS installation. See the installation guide for minimum hardware requirements.
    Navneet.

  • DO i need some extra hardware interface for receving both Audio and video

    hi i m doing e-learning project. i have to capture video from webcam and voice from headphone and send to client.
    but my code is working fine for either one at a time.
    DO i need some extra hardware interface for receving both Audio and video. im using code AVTransmit and AVReceive found from this site only
    After running TX
    i give Dsound:// & vfw://0 in Media Locater only sound is received and no vedio
    and when i give vfw://0 in Media Locater only live video is transmited.
    im using JMF1.1.2e.
    if any one know the method to run or cause of it plz reply me soon. i will be very thankfull
    transmiter/server side code .first run TX on server
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class Tx extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    Vector targets;
    JList list;
    JButton startXmit;
    JButton rtcp;
    JButton update;
    JButton expiration;
    JButton statistics;
    JButton addTarget;
    JButton removeTarget;
    JTextField tf_remote_address;
    JTextField tf_remote_data_port;
    JTextField tf_media_file;
    JTextField tf_data_port;
    TargetListModel listModel;
    AVTransmitter avTransmitter;
    RTCPViewer rtcpViewer;
    JCheckBox cb_loop;
    Config config;
    public Tx() {
    setTitle( "JMF/RTP Transmitter");
         config= new Config();
         GridBagLayout gridBagLayout= new GridBagLayout();
         GridBagConstraints gbc;
         JPanel p= new JPanel();
         p.setLayout( gridBagLayout);
         JPanel localPanel= createLocalPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.gridwidth= 2;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( localPanel, gbc);
         p.add( localPanel);
         JPanel targetPanel= createTargetPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 1;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( targetPanel, gbc);
    p.add( targetPanel);
         JPanel mediaPanel= createMediaPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 2;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( mediaPanel, gbc);
    p.add( mediaPanel);
    JPanel buttonPanel= new JPanel();
    rtcp= new JButton( "RTCP Monitor");
    update= new JButton( "Transmission Status");
         update.setEnabled( false);
         rtcp.addActionListener( this);
         update.addActionListener( this);
         buttonPanel.add( rtcp);
         buttonPanel.add( update);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 3;
    gbc.gridwidth= 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( buttonPanel, gbc);
         p.add( buttonPanel);
    getContentPane().add( p);
         list.addMouseListener( this);
         addWindowListener( this);
    pack();
    setVisible( true);
    private JPanel createMediaPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "Media Locator:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_media_file= new JTextField( 35);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_media_file, gbc);
         p.add( tf_media_file);
         tf_media_file.setText( config.media_locator);
         cb_loop= new JCheckBox( "loop");
         startXmit= new JButton( "Start Transmission");
         startXmit.setEnabled( true);
         startXmit.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 2;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( cb_loop, gbc);
         p.add( cb_loop);
         cb_loop.setSelected( true);
         cb_loop.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( startXmit, gbc);
         p.add( startXmit);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Source");
         p.setBorder( titledBorder);
         return p;
    private JPanel createTargetPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         targets= new Vector();
         for( int i= 0; i < config.targets.size(); i++) {
         targets.addElement( config.targets.elementAt( i));
    listModel= new TargetListModel( targets);
    list= new JList( listModel);
         list.addKeyListener( this);
         list.setPrototypeCellValue( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    JScrollPane scrollPane= new JScrollPane( list,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( scrollPane, gbc);
         p.add( scrollPane);
    JPanel p1= new JPanel();
         p1.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_address= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_address, gbc);
         p1.add( tf_remote_address);
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_data_port, gbc);
         p1.add( tf_remote_data_port);     
    JPanel p2= new JPanel();
    addTarget= new JButton( "Add Target");     
    removeTarget= new JButton( "Remove Target");
         p2.add( addTarget);
         p2.add( removeTarget);
         addTarget.addActionListener( this);
         removeTarget.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.gridwidth= 2;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 20,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( p2, gbc);
         p1.add( p2);
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( p1, gbc);
         p.add( p1);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Targets");
         p.setBorder( titledBorder);
         return p;
    private JPanel createLocalPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         JTextField tf_local_host= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_local_host, gbc);
         p.add( tf_local_host);
         try {
    String host= InetAddress.getLocalHost().getHostAddress();     
         tf_local_host.setText( host);
         } catch( UnknownHostException e) {
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_data_port, gbc);
         p.add( tf_data_port);
         tf_data_port.setText( config.local_data_port);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Local Host");
         p.setBorder( titledBorder);
         return p;
    public void actionPerformed( ActionEvent event) {
    Object source= event.getSource();
         if( source == addTarget) {
         String ip= tf_remote_address.getText().trim();
         String port= tf_remote_data_port.getText().trim();
         String localPort= tf_data_port.getText().trim();
         addTargetToList( localPort, ip, port);
         if( avTransmitter != null) {
         avTransmitter.addTarget( ip, port);
         } else if( source == removeTarget) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              if( avTransmitter != null) {
         avTransmitter.removeTarget( target.ip, target.port);
              targets.removeElement( target);
              listModel.setData( targets);          
         } else if( source == startXmit) {
         if( startXmit.getLabel().equals( "Start Transmission")) {          
         int data_port= new Integer( tf_data_port.getText()).intValue();
              avTransmitter= new AVTransmitter( this, data_port);
         avTransmitter.start( tf_media_file.getText().trim(), targets);          
              avTransmitter.setLooping( cb_loop.isSelected());
         startXmit.setLabel( "Stop Transmission");
         } else if( startXmit.getLabel().equals( "Stop Transmission")) {
              avTransmitter.stop();
              avTransmitter= null;
              removeNonBaseTargets();
              listModel.setData( targets);
         startXmit.setLabel( "Start Transmission");          
         } else if( source == rtcp) {
         if( rtcpViewer == null) {
         rtcpViewer= new RTCPViewer();
         } else {
              rtcpViewer.setVisible( true);
              rtcpViewer.toFront();
         } else if( source == cb_loop) {
         if( avTransmitter != null) {
              avTransmitter.setLooping( cb_loop.isSelected());
    private void removeNonBaseTargets() {
         String localPort= tf_data_port.getText().trim();
         for( int i= targets.size(); i > 0;) {
         Target target= (Target) targets.elementAt( i - 1);
         if( !target.localPort.equals( localPort)) {
    targets.removeElement( target);
         i--;
    public void addTargetToList( String localPort,
                             String ip, String port) {     
    ListUpdater listUpdater= new ListUpdater( localPort, ip,
                                  port, listModel, targets);
    SwingUtilities.invokeLater( listUpdater);           
    public void rtcpReport( String report) {
         if( rtcpViewer != null) {
         rtcpViewer.report( report);
    public void windowClosing( WindowEvent event) {
         config.local_data_port= tf_data_port.getText().trim();
         config.targets= new Vector();
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( config.local_data_port)) {
              config.addTarget( target.ip, target.port);
         config.media_locator= tf_media_file.getText().trim();
         config.write();
    System.exit( 0);
    public void windowClosed( WindowEvent event) {
    public void windowDeiconified( WindowEvent event) {
    public void windowIconified( WindowEvent event) {
    public void windowActivated( WindowEvent event) {
    public void windowDeactivated( WindowEvent event) {
    public void windowOpened( WindowEvent event) {
    public void keyPressed( KeyEvent event) {
    public void keyReleased( KeyEvent event) {
    Object source= event.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
    public void keyTyped( KeyEvent event) {
    public void mousePressed( MouseEvent e) {
    public void mouseReleased( MouseEvent e) {
    public void mouseEntered( MouseEvent e) {
    public void mouseExited( MouseEvent e) {
    public void mouseClicked( MouseEvent e) {
    Object source= e.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              tf_remote_address.setText( target.ip);
              tf_remote_data_port.setText( target.port);
         int index= list.locationToIndex( e.getPoint());
    public static void main( String[] args) {
    new Tx();
    class TargetListModel extends AbstractListModel {
    private Vector options;
    public TargetListModel( Vector options) {
         this.options= options;
    public int getSize() {
         int size;
         if( options == null) {
         size= 0;
         } else {
         size= options.size();
         return size;
    public Object getElementAt( int index) {
    String name;
    if( index < getSize()) {
         Target o= (Target)options.elementAt( index);
    name= o.localPort + " ---> " + o.ip + ":" + o.port;
         } else {
         name= null;
         return name;
    public void setData( Vector data) {
         options= data;
         fireContentsChanged( this, 0, data.size());
    class ListUpdater implements Runnable {
    String localPort, ip, port;
    TargetListModel listModel;
    Vector targets;
    public ListUpdater( String localPort, String ip, String port,
                   TargetListModel listModel, Vector targets) {
         this.localPort= localPort;
         this.ip= ip;
         this.port= port;
         this.listModel= listModel;
         this.targets= targets;
    public void run() {
    Target target= new Target( localPort, ip, port);
         if( !targetExists( localPort, ip, port)) {
         targets.addElement( target);
    listModel.setData( targets);
    public boolean targetExists( String localPort, String ip, String port) {
         boolean exists= false;
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( localPort)
         && target.ip.equals( ip)
              && target.port.equals( port)) {          
              exists= true;
         break;
         return exists;
    >>>>>>>>>>>>>>>>>
    import java.awt.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.util.*;
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import javax.media.control.QualityControl;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    public class AVTransmitter implements ReceiveStreamListener, RemoteListener,
    ControllerListener {
    // Input MediaLocator
    // Can be a file or http or capture source
    private MediaLocator locator;
    private String ipAddress;
    private int portBase;
    private Processor processor = null;
    private RTPManager rtpMgrs[];
    private int localPorts[];
    private DataSource dataOutput = null;
    private int local_data_port;
    private Tx tx;
    public AVTransmitter( Tx tx, int data_port) {
         this.tx= tx;
         local_data_port= data_port;
    * Starts the transmission. Returns null if transmission started ok.
    * Otherwise it returns a string with the reason why the setup failed.
    public synchronized String start( String filename, Vector targets) {
         String result;
         locator= new MediaLocator( filename);
         // Create a processor for the specified media locator
         // and program it to output JPEG/RTP
         result = createProcessor();
         if (result != null) {
         return result;
         // Create an RTP session to transmit the output of the
         // processor to the specified IP address and port no.
         result = createTransmitter( targets);
         if (result != null) {
         processor.close();
         processor = null;
         return result;
         // Start the transmission
         processor.start();
         return null;
    * Use the RTPManager API to create sessions for each media
    * track of the processor.
    private String createTransmitter( Vector targets) {
         // Cheated. Should have checked the type.
         PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
         PushBufferStream pbss[] = pbds.getStreams();
         rtpMgrs = new RTPManager[pbss.length];
         localPorts = new int[ pbss.length];
         SessionAddress localAddr, destAddr;
         InetAddress ipAddr;
         SendStream sendStream;
         int port;
         SourceDescription srcDesList[];
         for (int i = 0; i < pbss.length; i++) {
         // for (int i = 0; i < 1; i++) {
         try {
              rtpMgrs[i] = RTPManager.newInstance();     
              port = local_data_port + 2*i;
              localPorts[ i]= port;
              localAddr = new SessionAddress( InetAddress.getLocalHost(),
                                  port);
              rtpMgrs.initialize( localAddr);          
              rtpMgrs[i].addReceiveStreamListener(this);
              rtpMgrs[i].addRemoteListener(this);
         for( int k= 0; k < targets.size(); k++) {
              Target target= (Target) targets.elementAt( k);
              int targetPort= new Integer( target.port).intValue();
              addTarget( localPorts[ i], rtpMgrs[ i], target.ip, targetPort + 2*i);
              sendStream = rtpMgrs[i].createSendStream(dataOutput, i);          
              sendStream.start();
         } catch (Exception e) {
              e.printStackTrace();
              return e.getMessage();
         return null;
    public void addTarget( String ip, String port) {
         for (int i= 0; i < rtpMgrs.length; i++) {
         int targetPort= new Integer( port).intValue();
         addTarget( localPorts[ i], rtpMgrs[ i], ip, targetPort + 2*i);
    public void addTarget( int localPort, RTPManager mgr, String ip, int port) {
         try {
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         mgr.addTarget( addr);
         tx.addTargetToList( localPort + "", ip, port + "");
         } catch( Exception e) {
         e.printStackTrace();
    public void removeTarget( String ip, String port) {
         try {     
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTarget( addr, "target removed from transmitter.");
         } catch( Exception e) {
         e.printStackTrace();
    boolean looping= true;
    public void controllerUpdate( ControllerEvent ce) {
         System.out.println( ce);
         if( ce instanceof DurationUpdateEvent) {
         Time duration= ((DurationUpdateEvent) ce).getDuration();
         System.out.println( "duration: " + duration.getSeconds());
         } else if( ce instanceof EndOfMediaEvent) {
         System.out.println( "END OF MEDIA - looping=" + looping);
         if( looping) {
         processor.setMediaTime( new Time( 0));
              processor.start();
    public void setLooping( boolean flag) {
         looping= flag;
    public void update( ReceiveStreamEvent event) {
         String timestamp= getTimestamp();
         StringBuffer sb= new StringBuffer();
         if( event instanceof InactiveReceiveStreamEvent) {
         sb.append( timestamp + " Inactive Receive Stream");
         } else if( event instanceof ByeEvent) {
         sb.append( timestamp + " Bye");
         } else {
         System.out.println( "ReceiveStreamEvent: "+ event);
         tx.rtcpReport( sb.toString());     
    public void update( RemoteEvent event) {     
         String timestamp= getTimestamp();
         if( event instanceof ReceiverReportEvent) {
         ReceiverReport rr= ((ReceiverReportEvent) event).getReport();
         StringBuffer sb= new StringBuffer();
         sb.append( timestamp + " RR");
         if( rr != null) {
              Participant participant= rr.getParticipant();
              if( participant != null) {
              sb.append( " from " + participant.getCNAME());
              sb.append( " ssrc=" + rr.getSSRC());
              } else {
              sb.append( " ssrc=" + rr.getSSRC());
              tx.rtcpReport( sb.toString());
         } else {
         System.out.println( "RemoteEvent: " + event);
    private String getTimestamp() {
         String timestamp;
         Calendar calendar= Calendar.getInstance();
         int hour= calendar.get( Calendar.HOUR_OF_DAY);
         String hourStr= formatTime( hour);
         int minute= calendar.get( Calendar.MINUTE);
         String minuteStr= formatTime( minute);
         int second= calendar.get( Calendar.SECOND);
         String secondStr= formatTime( second);
         timestamp= hourStr + ":" + minuteStr + ":" + secondStr;     
         return timestamp;
    private String formatTime( int time) {     
         String timeStr;
         if( time < 10) {
         timeStr= "0" + time;
         } else {
         timeStr= "" + time;
         return timeStr;
    * Stops the transmission if already started
    public void stop() {
         synchronized (this) {
         if (processor != null) {
              processor.stop();
              processor.close();
              processor = null;
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTargets( "Session ended.");
              rtpMgrs[ i].dispose();
    public String createProcessor() {
         if (locator == null) {
         return "Locator is null";
         DataSource ds;
         DataSource clone;
         try {
         ds = javax.media.Manager.createDataSource(locator);
         } catch (Exception e) {
         return "Couldn't create DataSource";
         // Try to create a processor to handle the input media locator
         try {
         processor = javax.media.Manager.createProcessor(ds);
         processor.addControllerListener( this);     
         } catch (NoProcessorException npe) {
         return "Couldn't create processor";
         } catch (IOException ioe) {
         return "IOException creating processor";
         // Wait for it to configure
         boolean result = waitForState(processor, Processor.Configured);
         if (result == false)
         return "Couldn't configure processor";
         // Get the tracks from the processor
         TrackControl [] tracks = processor.getTrackControls();
         // Do we have atleast one track?
         if (tracks == null || tracks.length < 1)
         return "Couldn't find tracks in processor";
         // Set the output content descriptor to RAW_RTP
         // This will limit the supported formats reported from
         // Track.getSupportedFormats to only valid RTP formats.
         ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
         processor.setContentDescriptor(cd);
         Format supported[];
         Format chosen;
         boolean atLeastOneTrack = false;
         // Program the tracks.
         for (int i = 0; i < tracks.length; i++) {
         Format format = tracks[i].getFormat();
         if (tracks[i].isEnabled()) {
              supported = tracks[i].getSupportedFormats();
              // We've set the output content to the RAW_RTP.
              // So all the supported formats should work with RTP.
              // We'll just pick the first one.
              if (supported.length > 0) {
              if (supported[0] instanceof VideoFormat) {
                   // For video formats, we should double check the
                   // sizes since not all formats work in all sizes.
                   chosen = checkForVideoSizes(tracks[i].getFormat(),
                                       supported[0]);
              } else
                   chosen = supported[0];
              tracks[i].setFormat(chosen);
              System.err.println("Track " + i + " is set to transmit as:");
              System.err.println(" " + chosen);
              atLeastOneTrack = true;
              } else
              tracks[i].setEnabled(false);
         } else
              tracks[i].setEnabled(false);
         if (!atLeastOneTrack)
         return "Couldn't set any of the tracks to a valid RTP format";
         // Realize the processor. This will internally create a flow
         // graph and attempt to create an output datasource for JPEG/RTP
         // audio frames.
         result = waitForState(processor, Controller.Realized);
         if (result == false)
         return "Couldn't realize processor";
         // Set the JPEG quality to .5.
         setJPEGQuality(processor, 0.5f);
         // Get the output data source of the processor
         dataOutput = processor.getDataOutput();
         return null;
    static SessionAddress destAddr1, destAddr2;
    * For JPEG and H263, we know that they only work for particular
    * sizes. So we'll perform extra checking here to make sure they
    * are of the right sizes.
    Format checkForVideoSizes(Format original, Format supported) {
         int width, height;
         Dimension size = ((VideoFormat)original).getSize();
         Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
         Format h263Fmt = new Format(VideoFormat.H263_RTP);
         if (supported.matches(jpegFmt)) {
         // For JPEG, make sure width and height are divisible by 8.
         width = (size.width % 8 == 0 ? size.width :
                        (int)(size.width / 8) * 8);
         height = (size.height % 8 == 0 ? size.height :
                        (int)(size.height / 8) * 8);
         } else if (supported.matches(h263Fmt)) {
         // For H.263, we only support some specific sizes.
         if (size.width < 128) {
              width = 128;
              height = 96;
         } else if (size.width < 176) {
              width = 176;
              height = 144;
         } else {
              width = 352;
              height = 288;
         } else {
         // We don't know this particular format. We'll just
         // leave it alone then.
         return supported;
         return (new VideoFormat(null,
                        new Dimension(width, height),
                        Format.NOT_SPECIFIED,
                        null,
                        Format.NOT_SPECIFIED)).intersects(supported);
    * Setting the encoding quality to the specified value on the JPEG encoder.
    * 0.5 is a good default.
    void setJPEGQuality(Player p, float val) {
         Control cs[] = p.getControls();
         QualityControl qc = null;
         VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
         // Loop through the controls to find the Quality control for
         // the JPEG encoder.
         for (int i = 0; i < cs.length; i++) {
         if (cs[i] instanceof QualityControl &&
              cs[i] instanceof Owned) {
              Object owner = ((Owned)cs[i]).getOwner();
              // Check to see if the owner is a Codec.
              // Then check for the output format.
              if (owner instanceof Codec) {
              Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);
              for (int j = 0; j < fmts.length; j++) {
                   if (fmts[j].matches(jpegFmt)) {
                   qc = (QualityControl)cs[i];
                   qc.setQuality(val);
                   System.err.println("- Setting quality to " +
                             val + " on " + qc);
                   break;
              if (qc != null)
              break;
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
         return stateLock;
    void setFailed() {
         failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
         p.addControllerListener(new StateListener());
         failed = false;
         // Call the required method on the processor
         if (state == Processor.Configured) {
         p.configure();
         } else if (state == Processor.Realized) {
         p.realize();
         // Wait until we get an event that confirms the
         // success of the method, or a failure event.
         // See StateListener inner class
         while (p.getState() < state && !failed) {
         synchronized (getStateLock()) {
              try {
              getStateLock().wait();
              } catch (InterruptedException ie) {
              return false;
         if (failed)
         return false;
         else
         return true;
    * Inner Classes
    class StateListener implements ControllerListener {
         public void controllerUpdate(ControllerEvent ce) {
         // If there was an error during configure or
         // realiz

    I do this all the time, I put my MBP to a 60 inch Sharp. If you have the video working do the simple thing first. Check to make sure your sound is on your TV and Mac. Then if that doesn't work go to System Prefrences and under sound go to a tab called Output and see if your TV is listed and if it is change it to that setting
    Hope It Works

  • FIM Reporting installation (where to put SQL Reporting Services?)

    Hi,
    I'm installing FIM 2010 R2 SP1 with Reporting feature.
    It is going to be installation with separate SQL and separate servers for SCSM DW and SCSM MS.
    I have SQL where I prepared 3 instances (default one for FIM databases, one for SCSM SM databases, one for SCSM DW databases). My question is - which one of them should have SQL Reporting services installed?
    Borys Majewski, Identity Management Solutions Architect (Blog: IDArchitect.NET)

    When using SCSM 2012 (SP1) you also have to install the analytic services on the instances. I can't remember exactly if it was on the DW or MS, but it would tell you during the installation of it.
    And make sure your FIM version is at leat 4.1.3451, I went through a lot of pain with version 4.1.3419 en the
    KB256143 error.
    Find me on linkedin: http://nl.linkedin.com/in/tranet

  • SQL Features for FIM Synchronization Server

    Hi,
    As we need to Install the FIM Synchronization server  of FIM 2010 R2 SP-1 only. Could you please suggest if all the below sql server features are mandatory to install for FIM synchronization Server. 
    Database Engine Services
    Full-Text Search
    Analysis Services
    Reporting Services
    Business Intelligence Development Studio
    Integration Services
    Management Tools - Basic
    Management Tools - Complete
    Thanks
    Harry

    Hi Harry,
    According to
    this article, the SQL Server features that are required for a Sync Services installation are the Database Engine Services and (optionally) the Management Tools - Basic.
    Cheers,
    Tom Houston, UK Identity Management Practice

  • Looking for a report to get all managed system components

    Hi,
    We are looking for a report to get the support pack level of managed system.
    We can get that by going individually on each system entry in SMSY. Is there a standard report or a transaction in solution managed that can list the support pack level of all managed systems ?
    Thansk you for your help.
    Chak

    Hi,
    Another option you have -- provided that you are running EarlyWatch Reports on all of your systems -- would be to create a single Service Level Report.
    You would create a variant that includes all of your systems under the Select for Reporting column. Then under the Content from Solution Manager tab select the System Configuration -->  Select for Reporting box.
    This System Configuration report will provide you will the hardware info (OS version, CPU, memory), database version, SAP software components/version, and the SAP kernel.
    The SLR allows you to extract and aggregate segments of your EWAs into a single report.
    Good luck.
    Bill

  • SAP Hardware sizing for "User-Based sizing".

    Short Text    
    User-based Hardware Sizing    
    Long Text    
    Dear SAP Support,
    We would like to know the SAP Hardware sizing for "User-Based sizing".
    Our queries is
    1. In "User-Based sizing", What we have to consider,
    the number of users are calculated in the basis of
    Concurrent users in the system in a given point of time
    or
    total number of users logged into the systems in the whole day?
    We have referred the SAP document "Sizing SAP System" and the above
    point are not clearly mentioned.
    Regards,

    As the document says there are number of possible definitions for "users" in SAP context...
    For understanding assume that no of users logged to the system they consume different resources / areas in the system, some login to the system whole day but they don't work whole day, some user open multiple session to work while other open multiple session but they don't exactly work on it which means (every new session consume memory/resources) like you said their are concurrent users wherein they work and consume resources (SAP WPs)
    So before finalizing the sizing first compare the both reports (user based, thorhgput) and read the advantages and disadvantages for both. You can also consult with SAP / Account Manager to help you
    as per SAP document there's no point in counting no of pc's, laptops to calculate no of users
    Also refer:
    http://www.sap.com/solutions/benchmark/index.epx

  • FIM Reporting and SCSM Database Query Issue

    Hello,
    We have been having issues with FIM Reporting, the ETL Process for some reason seems to be failing, we further drilled down and found that there was a SQL Query running on the SCSM database Server for a very long time.
    "CREATE PROCEDURE dbo.[p_GroomManagedEntity]  (      @TargetId uniqueidentifier,      @RetentionPeriodInMinutes int,      @GroomingCriteria nvarchar(max),      @BatchSize int  )
     AS  BEGIN      DECLARE @LastErr int;      DECLARE @RowCount int = 1;      DECLARE @TotalRowCount int = 0;      DECLARE @RetentionDateTime DATETIME;      DECLARE @SelectEntitiesToBeGroomedStmt
    nvarchar(max);      DECLARE @CoreDeleteTypedEntitiesTable TypedManagedEntityType;      DECLARE @TimeGenerated DATETIME = getutcdate();      DECLARE @Command nvarchar(MAX)      DECLARE @GroomHistoryId
    bigint      DECLARE @Comment nvarchar(max);          SET @Command = N'Exec dbo.p_GroomManagedEntity ' + CAST(@TargetId AS nvarchar(40)) + ', ' + CAST(@RetentionPeriodInMinutes  AS nvarchar(10)) +
    ', ' + CAST(@GroomingCriteria  AS nvarchar(100)) + ', ' + CAST(@BatchSize AS nvarchar(10))         -- Call the grooming history insert sproc       EXEC @LastErr = dbo.p_InternalJobHistoryInsert @Command,
    @GroomHistoryId OUT      IF @LastErr <> 0          GOTO Err;        CREATE TABLE #BaseManagedEntitiesToDelete      (          BaseManagedEntityId uniqueidentifier
         );          -- Figure out the retention datetime      SELECT @RetentionDateTime = DATEADD(mi, -@RetentionPeriodInMinutes, getutcdate())        -- Execute the grooming filter statement,
    hence populate the table variable, with "BatchSize" many entities.      WHILE (@RowCount > 0)      BEGIN          INSERT #BaseManagedEntitiesToDelete EXEC sp_executesql @GroomingCriteria,
    N'@Retention DATETIME,@TargetTypeId uniqueidentifier,@NumOfEntities INT',                   @Retention = @RetentionDateTime, @TargetTypeId = @TargetId, @NumOfEntities = @BatchSize;          
     SELECT @LastErr = @@ERROR, @RowCount = @@ROWCOUNT;          IF @LastErr <> 0              GOTO Err;                    IF (@RowCount >
    0)          BEGIN              -- Convert the BMEIds to TMEIds.              INSERT @CoreDeleteTypedEntitiesTable              SELECT
    TME.TypedManagedEntityId              FROM #BaseManagedEntitiesToDelete D              JOIN dbo.TypedManagedEntity TME                  ON D.BaseManagedEntityId
    = TME.BaseManagedEntityId              WHERE TME.IsDeleted = 0;                                       SELECT @LastErr = @@ERROR;
                 IF @LastErr <> 0                  GOTO Err;                                --
    Use existing DDP code to delete the instances captured in the temp table.                  EXEC @LastErr = dbo.p_DDPWrapperForGroomManagedEntity @TimeGenerated, @CoreDeleteTypedEntitiesTable;      
           IF @LastErr <> 0                  GOTO Err;                                TRUNCATE TABLE #BaseManagedEntitiesToDelete;
                 SELECT @LastErr = @@ERROR;              IF @LastErr <> 0                  GOTO Err;          END
                       SET @TotalRowCount = @TotalRowCount + @RowCount;      END            -- Call the grooming history insert sproc to update status to success
         SET @Comment = N'BaseManagedEntity: ' + CAST(@TotalRowCount AS nvarchar(10))      EXEC @LastErr = dbo.p_InternalJobHistoryUpdate @GroomHistoryId, 1, @Comment      IF @LastErr <> 0      
       GOTO Err;        RETURN 0        Err:        -- Call the grooming history insert sproc to update status to failure.      SET @Comment = N'BaseManagedEntity: ' + CAST(@TotalRowCount
    AS nvarchar(10))      EXEC @LastErr = dbo.p_InternalJobHistoryUpdate @GroomHistoryId, 2, @Comment      IF @LastErr <> 0          GOTO Err;        RETURN 1  END"
    Can somebody advise on what this query is really about and what is its fuction, we are thinking of killing this query since it has been running for a very long time, will that hamper or cause the database to corrupt.
    Rgds,
    Abhishek.

    Vijay,
    Thanks for you reply.
    I figure out a related bug:
    Bug 12859472: Cannot browse store procedure in case-sensitive MS SQL Database
    There are two possible workarounds:
    1. Use a database name with capital letters
    2. Do not use stored procedures, but access the tables directly.
    The notes on the Bug ticket describes that the issue would be scheduled to be fixed in PS7 which is 11.1.1.8.
    Cheers!
    Leandro.

  • FIM Reporting alternative

    Hi,
    So we are aware of the FIM Reporting option using SCSM & SCDW. Do we need to use System Centre?
    I am not really that clued up on SC or SQL ...so what are other alternatives if we need
    1) FIM Reporting
    2) Long term storage of records for audit purposes (and report on these)
    Thx
    SK

    SCSM and SCDW are products within the System Centre suite itself, and you need both of those to enable FIM reporting. I'm not sure if you can license just those two products by themselves (although I suspect you should be able to) without getting the entire
    System Center Suite (which has a lot more stuff in it)
    FIM uses SQL to store everything, so in theory you always have the entire history and all the data in SQL. FIM Reporting just makes it easier by pulling out this data and presenting in a format you can easily query and customise. 
    This is purely my opinion, but FIM reporting is quite a heavy component and can be tricky to setup. I know there is a third party plugin which can do a better job, just can't remember the name of it!
    There's a great blog about FIM reporting you might want to read
    http://blog.predica.pl/fim-reporting-architecture-overview/

  • FIM Reporting initial sync running long time

    We have installed FIM Reporting last month , afterwards our FIM reporting initial sync powershell script is running from last month to Sync FIM data with SCSM server , but still only half data is synced with SCSM server ,
    we have 4 server
    1. Server1 --FIM server
    2. Server2 -- FIM database
    2. Server3 -- SCSM service manager  and SQL server Databases for Service manager and Data warehouse
    4. Server4 -- Data warehouse server
    As FIM initial sync script is taking long time to sync so we found some errors in Server 4 (Data warehouse server) multiple times during ETL jobs running.
    Error screen shot
    Please give some suggestions to make FIM initial sync faster

    Please try Resume-FIMReportingInitialSync instead of starting initial sync once again.
    Sadly Initial Sync is very long and even on test environments it can take a long time.
    But it seems that data from FIM was successfully moved to reporting database, but it hasn't been calculated by Service Manager correctly between its databases. 
    If you found my post helpful, please give it a Helpful vote. If it answered your question, remember to mark it as an Answer.

Maybe you are looking for